Mảng php với các giá trị mặc định

❮ Tham chiếu mảng PHP

Thí dụ

Điền vào một mảng với các giá trị

$a1=array_fill(3,4,"lam");
print_r($a1);
?>

Tự mình thử »


Định nghĩa và cách sử dụng

Hàm array_fill() điền vào một mảng các giá trị


cú pháp

mảng_fill(chỉ số, số, giá trị)

Giá trị tham số

Tham sốMô tảChỉ sốBắt buộc. Chỉ mục đầu tiên của mảng được trả vềnumberRequired. Chỉ định số lượng phần tử để chèn giá trịBắt buộc. Chỉ định giá trị sẽ sử dụng để điền vào mảng

chi tiết kỹ thuật

Giá trị trả về. Trả về mảng đầy Phiên bản PHP. 4. 2+
❮ Tham chiếu mảng PHP

Gần đây tôi đã viết về một số thay đổi mà tôi muốn đề xuất cho list() trong lõi PHP cho phiên bản 8. 3. cụ thể là nó sẽ hoạt động với iterables cũng như với các mảng và nó sẽ cho phép một "đối số" variadic sẽ chỉ định tất cả các mục là một phần của mảng ban đầu được liệt kê, nhưng không được chỉ định rõ ràng trong danh sách

Đó không phải là những thay đổi duy nhất mà tôi muốn thấy được triển khai cho list()

Nếu chúng tôi đã sử dụng list() để trích xuất các mục không tồn tại trong mảng


$data = [1 => 'A', 2 => 'B'];

[1 => $firstValue, 2 => $secondValue, 3 => $thirdValue] = $data;

var_dump($firstValue, $secondValue, $thirdValue);

thì điều này sẽ kích hoạt Thông báo trong PHP 7, được thăng cấp thành Cảnh báo trong PHP 8 và gán giá trị null cho biến đó. Nó thậm chí còn trở nên rắc rối hơn nếu chúng ta gán các phần tử được trích xuất đó cho các thuộc tính lớp không thể vô hiệu hóa


class Foo {
    private int $firstValue;
    private int $secondValue;
    private int $thirdValue;

    public function __construct(array $data = []) {
        [$this->firstValue, $this->secondValue, $this->thirdValue] = $data;
    }
}

$data = [1, 2];

$foo = new Foo($data);

Chúng tôi vẫn nhận được Cảnh báo (hoặc Thông báo), nhưng điều này giờ đây cũng sẽ dẫn đến Lỗi loại không bắt được nghiêm trọng vì chúng tôi đang cố gán null đó cho thuộc tính


class Foo {
    private int $firstValue;
    private int $secondValue;
    private int $thirdValue;

    public function __construct(array $data = []) {
        [$this->firstValue, $this->secondValue, $this->thirdValue] = $data;
    }
}

$data = [1, 2];

$foo = new Foo($data);
1, thuộc tính này không cho phép null;

Vậy chúng ta có thể làm gì để ngăn chặn điều này?

Tùy chọn đầu tiên của chúng tôi là sử dụng các biến trung gian, sau đó có thể được xác thực để đảm bảo rằng không có biến nào chứa null


public function __construct(array $data = []) {
    [$firstValue, $secondValue, $thirdValue] = $data;

    $this->firstValue = $firstValue ?? 0;
    $this->secondValue = $secondValue ?? 0;
    $this->thirdValue $thirdValue ?? 0;
}

Không phải là một giải pháp lý tưởng, bởi vì nó làm tăng dấu chân của mã của chúng ta, làm tăng thêm độ phức tạp của mã và loại bỏ nhiều lợi ích của việc sử dụng list() ngay từ đầu;

Một tùy chọn khác là sử dụng một variadic khi chúng ta khởi tạo đối tượng (hoặc truyền mảng cho một phương thức), nhưng với các giá trị riêng lẻ được xác định trong hàm tạo (hoặc định nghĩa phương thức) và với các giá trị mặc định được cung cấp


class Foo {
    public function __construct(
        private int $firstValue = 0,
        private int $secondValue = 0,
        private int $thirdValue = 0
    ) {
        var_dump($this->firstValue, $this->secondValue, $this->thirdValue);
    }
}

$data = [1, 2];

$foo = new Foo(...$data);

Vì vậy, chúng ta thường có thể truyền một mảng cho một phương thức bằng cách sử dụng một biến thể và để chữ ký hàm xử lý việc thiết lập bất kỳ giá trị mặc định nào cho chúng ta nếu các mục nhập không tồn tại trong mảng. Nhưng điều này vẫn sẽ có vấn đề. mặc dù chúng ta có thể chỉ định các khóa kết hợp bằng cách khớp các tên đối số trong định nghĩa phương thức của mình, nhưng chúng ta vẫn không thể trích xuất các giá trị từ các mảng được liệt kê có các khoảng trống trong chỉ mục, vì vậy đây không phải là một giải pháp thay thế hoàn hảo cho list()

Cách tiếp cận này không cần giới hạn đối với hàm tạo đối tượng, chúng ta cũng có thể sử dụng nó với hàm mũi tên như tôi đã mô tả trong bài viết trước của mình


class Foo {
    private int $firstValue;
    private int $secondValue;
    private int $thirdValue;

    public function __construct(array $data = []) {
        $splitData = fn($firstValue = 0, $secondValue = 0, $thirdValue = 0) => [$firstValue, $secondValue, $thirdValue];

        [$this->firstValue, $this->secondValue, $this->thirdValue] = $splitData(...$data);
    }
}

$data = [1, 2];

$foo = new Foo($data);

Nhưng những hạn chế là như nhau. Các phương thức chỉ có thể hoạt động với thứ tự của các đối số cho các mảng được liệt kê hoặc các đối số được đặt tên khớp với các khóa kết hợp trong mảng của chúng ta;


Vì vậy, sẽ không hữu ích nếu chúng ta có thể đặt giá trị mặc định cho list() như cách chúng ta làm cho chữ ký phương thức?


class Foo {
    private int $firstValue;
    private int $secondValue;
    private int $thirdValue;

    public function __construct(array $data = []) {
        [$this->firstValue, $this->secondValue, $this->thirdValue = 0] = $data;
    }
}

$data = [1, 2];

$foo = new Foo($data);

Nếu không có giá trị mặc định nào được chỉ định và phần tử không tồn tại trong mảng $data, thì nó vẫn sẽ gán null và đưa ra Cảnh báo;


Như với các đề xuất trước đây của tôi về các thay đổi đối với list(), đã quá muộn để đưa ra bất kỳ đề xuất mới nào cho PHP 8. 2; . 2 đã đạt đến bản phát hành GA (Tính khả dụng chung), thì tôi sẽ gửi RFC (Yêu cầu nhận xét) tới nội bộ để thay đổi được đề xuất này được nhắm mục tiêu cho PHP 8. 3 phát hành

Làm cách nào để điền vào một mảng các giá trị trong PHP?

PHP. Điền vào một mảng với các giá trị . Hàm điền vào một mảng với num mục nhập giá trị của tham số array_values, các khóa bắt đầu từ tham số started_index. Chỉ số đầu tiên của mảng được trả về. Chỉ cho phép các chỉ mục không âm. The array_fill() function is used to fill an array with values. The function fills an array with num entries of the value of the array_values parameter, keys starting at the starting_index parameter. The first index of the returned array. Allows non-negative indexes only.

Làm cách nào để đặt giá trị mặc định trong hàm PHP?

PHP cho phép bạn xác định các giá trị đối số mặc định kiểu C++. Trong trường hợp như vậy, nếu bạn không chuyển bất kỳ giá trị nào cho hàm, nó sẽ sử dụng giá trị đối số mặc định. .
chức năng sayXin chào($name="Ram"){
echo "Hello $name
";.
sayXin chào ("Sonoo");
sayHello();//không truyền giá trị
sayXin chào("Vimal");

Làm cách nào để khởi tạo mảng trong PHP?

Nói cách khác, việc khởi tạo mảng mới nhanh hơn, sử dụng cú pháp var first = [] thay vì sử dụng cú pháp var first = new . Thực tế là một hàm tạo hàm Array() và, [] là một phần của ngữ pháp theo nghĩa đen của mảng.