list() присваивает значения начиная с крайнего правого параметра. Если вы используете простые переменные, можете не беспокоиться об этом. Но если вы используете индексные массивы, вы можете ожидать, что в результате выполнения функции list() вы получите тот же порядок элементов, что и в исходном массиве: слева направо; однако это не так. Они будут присвоены в обратном порядке.
Пример 3. Использование list() с индексами массивов
= array( ‘coffee’ , ‘brown’ , ‘caffeine’ );
list( $a [ 0 ], $a [ 1 ], $a [ 2 ]) = $info ;
Выведет (сравните порядок исходных элементов с порядком, в в котором они были перезаписаны функцией list() ):
Пример #4 Использование list() с индексами массива
= array( ‘кофе’ , ‘коричневый’ , ‘кофеин’ );
list( $a [ 0 ], $a [ 1 ], $a [ 2 ]) = $info ;
Выведет (сравните порядок исходных элементов с порядком, в в котором они были перезаписаны list() ):
Примечания
list() присваивает значения начиная с крайнего правого параметра. Если вы используете простые переменные, можете не беспокоиться об этом. Но если вы используете индексные массивы, вы можете ожидать, что в результате выполнения функции list() вы получите тот же порядок элементов, что и в исходном массиве: слева направо; однако это не так. Они будут присвоены в обратном порядке.
Изменение массива во время выполнения функции list() (например, использование list($a, $b) = $b) приводит к непредсказуемому поведению.
list() работает только с массивами, индексами которых являются числа и нумерация которых начинается с 0.
Смотрите также
each() — Возвращает текущую пару ключ/значение из массива и смещает его указатель
array() — Создает массив
extract() — Импортирует переменные из массива в текущую таблицу символов
Источник
Php list не работает
(PHP 4, PHP 5, PHP 7, PHP 8)
list — Присваивает переменным из списка значения подобно массиву
Описание
Подобно array() , это не функция, а языковая конструкция. list() используется для того, чтобы присвоить списку переменных значения за одну операцию. Строки нельзя распаковать, а выражения list() не могут быть полностью пустыми.
До PHP 7.1.0, list() работала только с индексированными массивами и принимала числовые индексы начиная с 0.
Список параметров
Возвращаемые значения
Возвращает присвоенный массив.
Список изменений
Версия
Описание
7.3.0
Добавлена поддержка присвоения по ссылкам при деструктурировании массива.
7.1.0
Теперь возможно задавать ключи в list() . Это позволяет разыменовывать ассоциативные массивы и массивы с индексами не по порядку.
Примеры
Пример #1 Примеры использования list()
= array( ‘кофе’ , ‘коричневый’ , ‘кофеин’ );
// Составить список всех переменных list( $drink , $color , $power ) = $info ; echo » $drink — $color , а $power делает его особенным.\n» ;
// Составить список только некоторых из них list( $drink , , $power ) = $info ; echo «В $drink есть $power .\n» ;
// Или пропустить все, кроме третьей list( , , $power ) = $info ; echo «Мне нужен $power !\n» ;
// list() не работает со строками list( $bar ) = «abcde» ; var_dump ( $bar ); // NULL ?>
Пример #2 Пример использования list()
Пример #3 Использование list() с индексами массивов
Порядок, в котором индексы массива будут использоваться функцией list() , не имеет значения.
Производит такой вывод (обратите внимание, на порядок, в котором элементы были перечислены в синтаксисе list() и на порядок вывода):
Пример #5 list() с ключами
Начиная с PHP 7.1.0, для list() можно задавать конкретные ключи, которые могут быть произвольными выражениями. Допустимо смешивать строковые и числовые ключи. Однако элементы с ключами и без ключей не могут быть использоваться одновременно.
Результат выполнения данного примера:
Смотрите также
each() — Возвращает текущую пару ключ/значение из массива и смещает его указатель
array() — Создаёт массив
extract() — Импортирует переменные из массива в текущую таблицу символов
One thing to note here is that if you define the array earlier, e.g.: $a = [0, 0, 0];
the indexes will be kept in the correct order:
Thought that it was worth mentioning.
/** * It seems you can skip listed values. * Here’s an example to show what I mean. * * FYI works just as well with PHP 7.1 shorthand list syntax. * Tested against PHP 5.6.30, 7.1.5 */ $a = [ 1 , 2 , 3 , 4 ];
// this is quite normal use case for list echo «Unpack all values\n» ; list( $v1 , $v2 , $v3 , $v4 ) = $a ; echo » $v1 , $v2 , $v3 , $v4 \n» ; unset( $v1 , $v2 , $v3 , $v4 );
// this is what I mean: echo «Skip middle\n» ; list( $v1 , , , $v4 ) = $a ; echo » $v1 , $v2 , $v3 , $v4 \n» ; unset( $v1 , $v2 , $v3 , $v4 );
However, you will have to array_merge with an array long enough to ensure there are enough elements (if $parameter is empty, the code above would still error).
An alternate approach would be to use array_pad on the array to ensure its length (if all the defaults you need to add are the same).
foreach( $array as list( $odd , $even )) < echo » $odd is odd; $even is even» , PHP_EOL ; > ?>
The output: === 1 is odd; 2 is even 3 is odd; 4 is even 5 is odd; 6 is even
The list() definition won’t throw an error if your array is longer then defined list. list( $a , $b , $c ) = array( «a» , «b» , «c» , «d» );
var_dump ( $a ); // a var_dump ( $b ); // b var_dump ( $c ); // c ?>
The list construct seems to look for a sequential list of indexes rather taking elements in sequence. What that obscure statement means is that if you unset an element, list will not simply jump to the next element and assign that to the variable but will treat the missing element as a null or empty variable:
Since 7.1.0, you can use an array directly without list():
For PHP 7.1 on, the documentation states that integer and string keys can be mixed, but that elements with and without keys cannot. Here is an example, using data from getimagesize() with mixed keys:
Setting it like list( $var1 , $varN ) = null ?> does _not_ raise an E_NOTICE (or other error) and afaics effectively equals an https://php.net/function.unset of $var1,$varN.
I note this as contrasting with the fact that PHP triggers an E_NOTICE about «Undefined offset» «if there aren’t enough array elements to fill the list()», as attow documented for https://php.net/control-structures.foreach#control-structures.foreach.list and here only noted in https://php.net/function.list#122951 by Mardaneus.
For completeness, a bash(1) (v5.0 or 4.3 on macos10.13) cli test producing the same result for all my PHP-versions (installed via macports.org) follows. It’s also tested with php7.3 using bash5.0 on Debian10: bash —noprofile —norc -c ‘for php in php<<53..56>,<70..73>>;do for literal in «array()» null;do echo -n $php …=$literal:&&$php -n -d error_reporting=E_ALL -r «var_dump(list(\$var)=$literal);»;done;done’
# Above produces the same result pairs per version from: php53 …=array(): Notice: Undefined offset: 0 in Command line code on line 1 array(0) < > # . to: php73 …=null:NULL
Easy way to get actual date and time values in variables.
From PHP Version 7.1 you can specify keys in list(), or its new shorthand [] syntax. This enables destructuring of arrays with non-integer or non-sequential keys.