Как объявить пустой массив в php
Перейти к содержимому

Как объявить пустой массив в php

  • автор:

Заполнение массивов в 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 комментария

    e_svirsky

    с чего это вы интересно взяли что заполнение начнётся с индекса 1 в первом случае?
    не нужно тянуть сюда паскаль
    Решения вопроса 1

    littleguga

    littleguga @littleguga
    Не стыдно не знать, а стыдно не интересоваться.
    Вы ошибаетесь — заполнение идет с 0 индекса.(по ссылке fiddle)

    $arr = array(); array_push($arr, "test"); print_r($arr);

    Сами проверьте, вот здесь, например.
    Ответ написан более трёх лет назад
    Комментировать
    Нравится 1 Комментировать
    Ответы на вопрос 2

    danil_sport

    Danil Akhtarov @danil_sport
    Web, android, C++
    PHP.нет посмотри тут. В свое время помогло
    Ответ написан более трёх лет назад
    Комментировать
    Нравится Комментировать

    elevenelven

    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])

    elevenelven

    Alex Safonov @elevenelven

    Алексей: Будьте добры, приведите полностью код который эквивалентен второму листингу. Я думаю вы не имеете ввиду

    $arr = array(); unset($arr[0]); array_push($arr, 1);

    vadimkot

    Алексей: вы каким то не тем php пользуетесь — при инициализации массива в него никакие элементы не добавляются и если выполнить array_push() после инициализации, то в массиве появится элемент с индексом 0.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *