Как создать пустой массив в 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);
Ответы
Ответ 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-библиотека, которая обеспечивает возможность создания массива размера исправления.
Ответ 7
$array = new SplFixedArray(5);
echo $array->getSize()."\n";
Вы можете использовать документацию PHP подробнее узнать эту ссылкуhttps://www.php.net/manual/en/splfixedarray.setsize.php