Заполнение массивов в PHP
Элементы в массив не обязательно добавлять сразу в момент объявления этого массива. Можно вначале объявить этот массив пустым, а затем добавить в него необходимые элементы, вот так:
Массив не обязательно должен быть изначально пустым — там уже что-то может быть, но мы все равно можем добавлять новые элементы:
Пусть дан пустой массив:
Описанным способом заполните этот массив элементами со значениями 1 , 2 , 3 , 4 и 5 .
Пусть дан такой массив:
Добавьте ему в конец элементы 4 и 5 .
Как объявить пустой массив в php
Ранее мы рассмотрели, как в переменные можно сохранить одиночное значение, например, одно число или одну строку. Но кроме того, мы можем сохранить в переменную набор значений. И для этого используются массивы .
Есть несколько способов определения массивов. Первый способ представляет использование функции array() :
$numbers = array();
В данном случае определяется пустой массив $numbers .
Второй способ представляет использование квадратных скобок [] :
$numbers = [];
При определении массива мы сразу можем передать ему начальные данные. Если применяются квадратные скобки, то элементы массива передаются внутри скобок:
$numbers = [1, 2, 3, 4];
Аналогичное определение массива с помощью функции array() :
$numbers = array(1, 2, 3, 4);
В качестве элементов массива могут выступать объекты любого типа.
Для обращения к элементам массива применяются ключи . Ключ может представлять число или строку или одновременно и числа, и строки.
Для обычных массивов ключ представляет число. Числовые ключи еще называют индексами. Нумерация индексов начинается с нуля, то есть первый элемент массива имеет индекс 0, второй элемент — индекс 1 и так далее.
Например, обратимся к третьему элементу массива:
Поскольку нумерация индексов начинается с нуля, то чтобы обратиться к третьему элементу, надо использовать индекс 2.
Таким образом мы получаем значение элемента массива. Но также мы можем его изменить:
При этом нужно учитывать количество элементов массива. Так, мы не можем обратиться к элементу с несуществующим индексом:
В данном случае в массиве $numbers всего 4 элемента, поэтому индексом последнего элемента будет 3. Таким образом, элемента с индексом 4 в массиве не существует, и при попытке получить его значение echo $numbers[4] PHP нам покажет предупреждение.
Тем не менее если мы хотим установить элемент по еще не существующему индексу, мы можем это сделать:
Здесь устанавливается элемент с индексом 5. После установки мы можем получать его значение. При этом элемента с индексом 4 по прежнему не существует.
Для добавления нового элемента в массив мы можем, как в примере выше, просто установить новый элемент по еще не установленному индексу. Но есть и другой способ:
При таком способе новый элемент добавляется в конец массив, соответственно здесь, чтобы получить новый элемент, надо использовать индекс 4.
Чтобы получить полное наглядное представление о том, как в конкретном массиве сопоставляются ключи и значения элементов, можно использовать функцию print_r , в которую в качестве параметра передается массив:
Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 [4] => 25 )
Также следует отметить, что необязательно как-то специально инициализровать переменную массива — мы можем по ходу добавлять элементы в массив:
20 [1] => 120 [2] => 720 ) ?>
Оператор =>
Оператор => позволяет сопоставить ключ с определенным значением. Хотя при определении массива выше нам не требовался подобный оператор, тем не менее мы можем его применять. Например, следующий массив:
$numbers = [1, 4, 9, 16];
Будет аналогичен следующему массиву:
$numbers = [0=>1, 1=>4, 2=>9, 3=>16]; // $numbers = array(0=>1, 1=>4, 2=>9, 3=>16);
Каждый элемент определяется в следующем формате: ключ => значение
В дальнейшем мы также можем обращаться к элементам этого массива.
Этот оператор может понадобится, если мы хотим переопределить порядок индексов. Так, по умолчанию нумеация индексов начинается с нуля и каждый следующий элемент имеет индекс предыдущего элемента + 1. Оператор => же позволяет определить свои индексы вручную для элементов, необязательно с нуля и необязательно по порядку:
$numbers = [1=> 1, 2=> 4, 5=> 25, 4=> 16]; echo $numbers[2]; // 4
Также мы можем задать индекс лишь для одного элемента, тогда для последующих элементов индекс автоматически будет увеличиваться на единиицу:
$numbers = [4=> 16, 25, 36, 49, 64]; print_r($numbers);
В данном случае индексация начинается с числа 4 — это индекс элемента 16. Тогда для элемента 25 индексом будет число 5 и так далее.
Array ( [4] => 16 [5] => 25 [6] => 36 [7] => 49 [8] => 64 )
Перебор массива
Для перебора массива мы можем применять стандартный метод for :
В данном случае мы не определяем вручную индексы элементов, поэтому индексация начинается с нуля с увеличением на единиицу для последующего элемента. Поэтому мы можем в цикле через переменную $i передавать индекс, начиная с нуля. Единственная трудность может заключаться в том, как определить индекс конечного элемента, чтобы установить потолок для переменной $i . В этом случае мы можем с помощью встроенной функции count() получить длину массива. Эта функция в качестве параметра принимает массив и возвращает его длину.
Результат работы скрипта:
Tom Sam Bob Alice
Цикл foreach
Тем не менее выше использованный способ перебора не поможет, если индексы определяются вручную и отличаются они от соседних индексов не на единицу, а на произвольную величину. В этом случае мы можем использовать специальный цикл — foreach :
"Tom", 4 => "Sam", 5 => "Bob", 21 => "Alice"]; foreach($users as $element) < echo "$element
"; > ?>
В цикле foreach из массива последовательно извлекаются все элементы, и их значение помещается в переменную, указанную после ключевого слова as . В данном случае в переменную $element по очереди помещаются все четыре значения из массива $users . Когда будет извлечен последний элемент из массива, цикл завершается.
В итоге мы получим тот же результат:
Tom Sam Bob Alice
Цикл foreach позволяет извлекать не только значения, но и ключи элементов:
"Tom", 4 => "Sam", 5 => "Bob", 21 => "Alice"]; foreach($users as $key => $value) < echo "$key - $value
"; > ?>
Здесь при переборе элементов цикла в переменную $key будет передаваться ключ элемента, а в переменную $value — его значение.
Результат работы скрипта:
1 - Tom 4 - Sam 5 - Bob 21 - Alice
array_fill
Заполняет массив заданным в параметре count количеством записей значения value , начиная индексацию с ключа start_index .
Список параметров
Первый индекс возвращаемого массива.
Если начальный ключ start_index будет отрицательным, первым индексом возвращаемого массива будет значение этого отрицательного ключа ( start_index ), а следующие индексы будут начинаться с нуля до PHP 8.0.0; начиная с PHP 8.0.0 отрицательные ключи увеличиваются нормально (смотрите пример).
Количество добавляемых элементов. Должно быть больше или равно нулю и меньше или равно 2 147 483 647 .
Значение для заполнения.
Возвращаемые значения
Возвращает заполненный массив.
Ошибки
Выбрасывает исключение ValueError , если параметр count выходит за пределы диапазона.
Список изменений
| Версия | Описание |
|---|---|
| 8.0.0 | Функция array_fill() теперь выбрасывает исключение ValueError , если параметр count выходит за пределы диапазона; ранее выдавалась ошибка уровня E_WARNING , а функция возвращала значение false . |
Примеры
Пример #1 Пример использования функции array_fill()
$a = array_fill ( 5 , 6 , ‘банан’ );
print_r ( $a );
?>
Результат выполнения приведённого примера:
Array ( [5] => банан [6] => банан [7] => банан [8] => банан [9] => банан [10] => банан )
Пример #2 Пример использования функции array_fill() с отрицательным начальным индексом
$a = array_fill (- 2 , 4 , ‘груша’ );
print_r ( $a );
?>
Результат выполнения приведённого примера в PHP 7:
Array ( [-2] => груша [0] => груша [1] => груша [2] => груша )
Результат выполнения приведённого примера в PHP 8:
Array ( [-2] => груша [-1] => груша [0] => груша [1] => груша )
Обратите внимание, вывод до PHP 8.0.0 не содержит индекс -1 .
Примечания
Подробное описание отрицательных ключей дано в разделе «Массивы».
Смотрите также
- array_fill_keys() — Создаёт массив и заполняет его значениями с определёнными ключами
- str_repeat() — Возвращает повторяющуюся строку
- range() — Создаёт массив, содержащий диапазон элементов
User Contributed Notes 7 notes
19 years ago
This is what I recently did to quickly create a two dimensional array (10×10), initialized to 0:
$a = array_fill ( 0 , 10 , array_fill ( 0 , 10 , 0 ));
?>
This should work for as many dimensions as you want, each time passing to array_fill() (as the 3rd argument) another array_fill() function.
9 years ago
If you need negative indices:
$b = array_fill (- 2 , 4 , ‘pear’ ); //this is not what we want
$c = array_fill_keys ( range (- 2 , 1 ), ‘pear’ ); //these are negative indices
print_r ( $b );
print_r ( $c );
?>
Here is result of the code above:
Array
(
[-2] => pear
[0] => pear
[1] => pear
[2] => pear
)
Array
(
[-2] => pear
[-1] => pear
[0] => pear
[1] => pear
)
10 years ago
Using objects with array_fill may cause unexpected results. Consider the following:
//fill an array with objects
$array = array_fill ( 0 , 2 , new Foo ());
//now we change the attribute of the object stored in index 0
//this actually changes the attribute for EACH object in the ENTIRE array
$array [ 0 ]-> bar = «apple» ;
var_dump ( $array );
/*
array(2) [0]=>
object(Foo)#1 (1) [«bar»]=>
string(5) «apple»
>
[1]=>
object(Foo)#1 (1) [«bar»]=>
string(5) «apple»
>
>
*/
?>
Objects are filled in the array BY REFERENCE. They are not copied for each element in the array.
2 years ago
As of PHP 8.0 the example code
$b = array_fill (- 2 , 4 , ‘pear’ );
print_r ( $b );
?>
now returns
11 years ago
I made this function named «array_getMax» that returns te maximum value and index, from array:
//using array_search_all by helenadeus at gmail dot com
foreach ( $haystack as $k => $v )
if( $haystack [ $k ]== $needle )
$array [] = $k ;
>
>
return ( $array );
function array_getMax ( $array )
$conteo = array_count_values ( $array );
//$antValue=null;
$maxValue = null ;
$keyValue = null ;
foreach( $array as $key => $value ) <
if( $maxValue == null ) <
$maxValue = $value ;
$keyValue = $key ;
break;
>
>
$resultSearch = array_search_all ( $maxValue , $array );
return array_fill_keys ( $resultSearch , $maxValue );
//example
$arreglo =array( ‘e1’ => 99 , ‘e2′ => ’99’ , ‘e3’ => 1 , ‘e4’ => 1 , ‘e5’ => 98 );
var_dump ( array_getMax ( $arreglo ));
6 years ago
Fill missing keys in a (numerically-indexed) array with a default value
function fill_missing_keys ( $array , $default = null , $atleast = 0 )
return $array + array_fill ( 0 , max ( $atleast , max ( array_keys ( $array ))), $default );
>
21 years ago
array_fill() cannot be used to setup only missing keys in an array. This may be necessary for example before using implode() on a sparse filled array.
The solution is to use this function:
function array_setkeys (& $array , $fill = NULL ) <
$indexmax = — 1 ;
for ( end ( $array ); $key = key ( $array ); prev ( $array )) <
if ( $key > $indexmax )
$indexmax = $key ;
>
for ( $i = 0 ; $i if (!isset( $array [ $i ]))
$array [ $i ] = $fill ;
>
ksort ( $array );
>
?>
This is usefull in some situations where you don’t know which key index was filled and you want to preserve the association between a positioned field in an imploded array and the key index when exploding it.
- Функции для работы с массивами
- array_change_key_case
- array_chunk
- array_column
- array_combine
- array_count_values
- array_diff_assoc
- array_diff_key
- array_diff_uassoc
- array_diff_ukey
- array_diff
- array_fill_keys
- array_fill
- array_filter
- array_flip
- array_intersect_assoc
- array_intersect_key
- array_intersect_uassoc
- array_intersect_ukey
- array_intersect
- array_is_list
- array_key_exists
- array_key_first
- array_key_last
- array_keys
- array_map
- array_merge_recursive
- array_merge
- array_multisort
- array_pad
- array_pop
- array_product
- array_push
- array_rand
- array_reduce
- array_replace_recursive
- array_replace
- array_reverse
- array_search
- array_shift
- array_slice
- array_splice
- array_sum
- array_udiff_assoc
- array_udiff_uassoc
- array_udiff
- array_uintersect_assoc
- array_uintersect_uassoc
- array_uintersect
- array_unique
- array_unshift
- array_values
- array_walk_recursive
- array_walk
- array
- arsort
- asort
- compact
- count
- current
- end
- extract
- in_array
- key_exists
- key
- krsort
- ksort
- list
- natcasesort
- natsort
- next
- pos
- prev
- range
- reset
- rsort
- shuffle
- sizeof
- sort
- uasort
- uksort
- usort
- each
- Copyright © 2001-2024 The PHP Group
- My PHP.net
- Contact
- Other PHP.net sites
- Privacy policy
Объявить пустой массив php?
Как объявить пустой массив?
если $arr = array();
то заполнение начнется с индекса 1($arr[1]).
Можно так:
$arr = array();
unset($arr[0]);
но как это сделать правильнее и проще?- Вопрос задан более трёх лет назад
- 23349 просмотров
2 комментария
Оценить 2 комментария

с чего это вы интересно взяли что заполнение начнётся с индекса 1 в первом случае?
не нужно тянуть сюда паскаль
Решения вопроса 1
littleguga @littleguga
Не стыдно не знать, а стыдно не интересоваться.
Вы ошибаетесь — заполнение идет с 0 индекса.(по ссылке fiddle)$arr = array(); array_push($arr, "test"); print_r($arr);Сами проверьте, вот здесь, например.
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Ответы на вопрос 2
Danil Akhtarov @danil_sport
Web, android, C++
PHP.нет посмотри тут. В свое время помогло
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Alex Safonov @elevenelven
Php Dev @ Amadeus
Это описывается в руководстве.
php.net/manual/en/function.array.php'January', 'February', 'March'); print_r($firstquarter); ?>Как вариант, можете после наполнения массива, вставить в начало элемент, и убрать. Что двинет все ключи на 1.
$array = [1,2,3]; array_unshift($array, '' ); unset($array[0]);Ответ написан более трёх лет назад
Михаил @Madfisht3 Автор вопросаНужно пустой массив объявить. Чтобы там не было элементов. Объявить, но так, чтоб он был не инициализирован.
Алексей Объявляйте массив как обычно (array() или []). При добавлении в массив указываете нужный ключ ($arr[1] = 3.14)
Михаил @Madfisht3 Автор вопроса
krypt3r: а если у меня заполнение идёт через array_push? Тогда у меня первый элемент будет пустой, на сайте это лишняя строчка пустая.
Михаил @Madfisht3 Автор вопроса
Neoline: 500 Ошибка.
Михаил @Madfisht3 Автор вопроса
Второй листинг эквивалентен unset($arr[0])
Alex Safonov @elevenelven
Алексей: Будьте добры, приведите полностью код который эквивалентен второму листингу. Я думаю вы не имеете ввиду
$arr = array(); unset($arr[0]); array_push($arr, 1);
Алексей: вы каким то не тем php пользуетесь — при инициализации массива в него никакие элементы не добавляются и если выполнить array_push() после инициализации, то в массиве появится элемент с индексом 0.