Подтвердить что ты не робот

Как создать пустой массив в PHP с предопределенным размером?

Я создаю новый массив в цикле.

for $i < $number_of_items
    $data[$i] = $some_data;

PHP продолжает жаловаться на смещение, поскольку для каждой итерации я добавляю новый индекс для массива, что довольно глупо.

Notice: Undefined offset: 1 in include() (line 23 of /...
Notice: Undefined offset: 1 in include() (line 23 of /..
Notice: Undefined offset: 1 in include() (line 23 of /..

Есть ли способ предопределить числовые элементы в массиве, чтобы PHP не показывал это уведомление?

Другими словами, можно ли заранее определить размер массива аналогично этому?

$myarray = array($size_of_the_earray);
4b9b3361

Ответ 1

Невозможно создать массив заранее определенного размера, не указав значения для элементов этого массива.


Лучший способ инициализировать такой массив - array_fill. Гораздо предпочтительнее, чем различные решения типа "петля и вставка".

$my_array = array_fill(0, $size_of_the_array, $some_data);

Каждая позиция в $my_array будет содержать $some_data.

Первый ноль в array_fill просто указывает индекс, откуда массив должен быть заполнен значением.

Ответ 2

Вы не можете предопределить размер массива в php. Хорошим способом достижения вашей цели является следующее:

// Create a new array.
$array = array(); 

// Add an item while $i < yourWantedItemQuantity
for ($i = 0; $i < $number_of_items; $i++)
{
    array_push($array, $some_data);
    //or $array[] = $some_data; for single items.
}

Обратите внимание, что быстрее использовать array_fill() для заполнения массива:

$array = array_fill(0,$number_of_items, $some_data);

Если вы хотите проверить, установлено ли значение в индексе, вы должны использовать следующее: array_key_exists ( "ключ", $array) или isset ($ array [ "key" ])

См. array_key_exists , isset а также array_fill

Ответ 3

Возможно, если вы хотите инициализировать и заполнить массив диапазоном значений, используйте PHP (дождитесь его...) функция диапазона:

$a = range(1, 5);  // array(1,2,3,4,5)
$a = range(0, 10, 2); // array(0,2,4,6,8,10)

Ответ 4

Массивы PHP не нужно объявлять с размером.

Массив в PHP на самом деле является упорядоченной картой

Вы также не должны получать предупреждение/уведомление, используя код, как в примере, который вы показали. Обычное уведомление, которое получают люди, это "Неопределенное смещение" при чтении из массива.

Чтобы противостоять этому, проверьте с помощью isset или array_key_exists, или используйте такую функцию, как:

function isset_or($array, $key, $default = NULL) {
    return isset($array[$key]) ? $array[$key] : $default;
}

Так что вы можете избежать повторного кода.

Примечание: isset возвращает false, если элемент в массиве имеет значение NULL, но имеет выигрыш в производительности по сравнению с array_key_exists.

Если вы хотите указать массив с размером по соображениям производительности, посмотрите:

SplFixedArray в стандартной библиотеке PHP.

Ответ 5

Существует также array_pad. Вы можете использовать его следующим образом:

$data = array_pad($data,$number_of_items,0);

Для инициализации с нулями позиции $number_of_items массива $data.

Ответ 6

PHP предоставляет два типа массива.

  • нормальный массив
  • SplFixedArray

нормальный массив: этот массив является динамическим.

SplFixedArray: это стандартная php-библиотека, которая обеспечивает возможность создания массива размера исправления.