Я создаю новый массив в цикле for.
for $i < $number_of_items $data[$i] = $some_data;
PHP продолжает жаловаться на смещение, так как для каждой итерации я добавляю новый индекс для массива, который является довольно глупым.
Примечание: Неопределенное смещение: 1 в include () (строка 23 из / … Примечание: Неопределенное смещение: 1 в include () (строка 23 из / .. Примечание: Неопределенное смещение: 1 в include () (строка 23 из / ..
Как я могу это решить? Есть ли способ предопределить количество элементов в массиве, чтобы php не бросал глупую ошибку? подобно
$myarray = array($size_of_the_earray);
Это не так.
Для потомков
Лучший способ инициализировать такой массив – array_fill
. Весьма предпочтительнее, чем различные решения для петли и вставки.
Вы не можете предопределить размер массива в 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 («key», $ array) или isset ($ array ["key"])
См. Array_key_exists , isset и array_fill
Возможно, если вы хотите инициализировать и заполнить массив диапазоном значений, используйте функцию диапазона PHP (wait it …):
$a = range(1, 5); // array(1,2,3,4,5) $a = range(0, 10, 2); // array(0,2,4,6,8,10)
Массивы 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.
Существует также array_pad . Вы можете использовать его следующим образом:
$data = array_pad($data,$number_of_items,0);
Для инициализации с нулями позиции $ number_of_items массива $ data.
PHP предоставляет два типа массива.
Обычный массив: этот массив является динамическим.
SplFixedArray: это стандартная библиотека php, которая обеспечивает возможность создания массива размера исправления.