list

(PHP 4, PHP 5)

listПрисваивает переменным из списка значения подобно массиву

Описание

array list ( mixed $varname [, mixed $... ] )

Подобно array(), это не функция, а языковая конструкция. list() используется для того, чтобы присвоить списку переменных значения за одну операцию.

Список параметров

varname

Переменная.

Возвращаемые значения

Возвращает присвоенный массив.

Примеры

Пример #1 Примеры использования list()

<?php

$info 
= 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()

<table>
 <tr>
  <th>Имя работника</th>
  <th>Зарплата</th>
 </tr>

<?php
$result 
$pdo->query("SELECT id, name, salary FROM employees");
while (list(
$id$name$salary) = $result->fetch(PDO::FETCH_NUM)) {
    echo 
" <tr>\n" .
          
"  <td><a href=\"info.php?id=$id\">$name</a></td>\n" .
          
"  <td>$salary</td>\n" .
          
" </tr>\n";
}

?>

</table>

Пример #3 Использование list() с индексами массивов

<?php

list($a, list($b$c)) = array(1, array(23));

var_dump($a$b$c);

?>
int(1)
int(2)
int(3)

Пример #4 Использование list() с индексами массива

<?php

$info 
= array('кофе''коричневый''кофеин');

list(
$a[0], $a[1], $a[2]) = $info;

var_dump($a);

?>

Выведет (сравните порядок исходных элементов с порядком, в в котором они были перезаписаны list()):

array(3) {
  [2]=>
  string(12) "кофеин"
  [1]=>
  string(20) "коричневый"
  [0]=>
  string(8) "кофе"
}

Примечания

Внимание

list() присваивает значения начиная с крайнего правого параметра. Если вы используете простые переменные, можете не беспокоиться об этом. Но если вы используете индексные массивы, вы можете ожидать, что в результате выполнения функции list() вы получите тот же порядок элементов, что и в исходном массиве: слева направо; однако это не так. Они будут присвоены в обратном порядке.

Внимание

Изменение массива во время выполнения функции list() (например, использование list($a, $b) = $b) приводит к непредсказуемому поведению.

Замечание:

list() работает только с массивами, индексами которых являются числа и нумерация которых начинается с 0.

Смотрите также

  • each() - Возвращает текущую пару ключ/значение из массива и смещает его указатель
  • array() - Создает массив
  • extract() - Импортирует переменные из массива в текущую таблицу символов

Коментарии

The example states the following:
<?php
// list() doesn't work with strings
list($bar) = "abcde";
var_dump($bar); 
// output: NULL
?>

If the string is in a variable however, it seems using list() will treat the string as an array:
<?php
$string 
"abcde";
list(
$foo) = $string;
var_dump($foo);
// output: string(1) "a"
?>
2012-11-07 17:00:04
http://php5.kiev.ua/manual/ru/function.list.html
Автор:
The list() definition won't throw an error if your array is longer then defined list. 
<?php

list($a$b$c) = array("a""b""c""d");

var_dump($a); // a
var_dump($b); // b
var_dump($c); // c
?>
2012-12-23 21:08:43
http://php5.kiev.ua/manual/ru/function.list.html
Second, when you’re using the list() function, you must acknowledge each array element. You could not do this
list($weekday, $month) = $date;

But you can use empty values to ignore elements:
list ($weekday, , $month) = $date;
2013-07-14 03:58:03
http://php5.kiev.ua/manual/ru/function.list.html
As noted, list() will give an error if the input array is too short. This can be avoided by array_merge()'ing in some default values. For example:

<?php
$parameter 
'name';
list( 
$a$b ) = array_mergeexplode'='$parameter ), array( true ) );
?>

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

<?php
    $parameter 
'bob-12345';
    list( 
$name$id$fav_color$age ) = array_padexplode'-'$parameter ), 4'' );
   
var_dump($name$id$fav_color$age);
/* outputs
string(3) "bob"
string(5) "12345"
string(0) ""
string(0) ""
*/
?>
2013-09-10 18:45:57
http://php5.kiev.ua/manual/ru/function.list.html
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:

    $test = array("a","b","c","d");
    unset($test[1]);
    list($a,$b,$c)=$test;
    print "\$a='$a' \$b='$b' \$c='$c'<BR>";

results in:
$a='a' $b='' $c='c'

not:
$a='a' $b='c' $c='d'
2013-12-08 02:31:09
http://php5.kiev.ua/manual/ru/function.list.html
if we assign array's each value individual key('numeric only'), and use the array indices in list(),, then it output the reverse order of array keys-- 
BUT THE HIGHER KEY VALUE ("2" in this e.g below) WILL GET THE FIRST PLACE IN THE ARRAY IN RETURN, MEANS IT PUSHES THE VALUE WITH HIGHER KEY IN PLACE OF FIRST KEY VALUE, so it also gives higher key value the first priority while reversing the order of the keys and replacing the lower key value with the higher key value.

        $value = array( 0 => 'low', 2 => 'medium', 1 => 'higher');
        list($a[2], $a[1], $a[0]) = $value;
    var_dump($a);

//Outputs:---
array(3) {
            [0] => string(6) "medium" 
            [1]  => string(6) "higher" 
            [2]  => string(3) "low" 
}
2014-09-01 20:21:35
http://php5.kiev.ua/manual/ru/function.list.html
Автор:
The example showing that:

$info = array('kawa', 'brązowa', 'kofeina');
list($a[0], $a[1], $a[2]) = $info;
var_dump($a);

outputs:
array(3) {
[2]=>
string(8) "kofeina"
[1]=>
string(5) "brązowa"
[0]=>
string(6) "kawa"
}

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:

array(3) {
  [0]=>
  string(4) "kawa"
  [1]=>
  string(8) "brązowa"
  [2]=>
  string(7) "kofeina"
}

Thought that it was worth mentioning.
2014-10-21 13:35:50
http://php5.kiev.ua/manual/ru/function.list.html
Автор:
I see many people offer solutions about the flipped order of the list construct. All you have to do is this:

<?php

$info 
= array('coffee''brown''caffeine');

$a = list($a[0], $a[1], $a[2]) = $info;

var_dump($a);

?>

. . . and your info will be in the correct order. You can also just assign a new var to the list and it will still work: 

<?php

$info 
= array('coffee''brown''caffeine');

$b = list($a[0], $a[1], $a[2]) = $info;

var_dump($b);

?>
2015-06-21 08:54:55
http://php5.kiev.ua/manual/ru/function.list.html
Автор:
If you want use the undefined behaviour as you might expect it e.g. if you want: 

  $b = ['a','b']; list($a, $b) = $b;

to result in $a=='a' and $b=='b', then you can just cast $b to an array (even although it already is) to create a copy. e.g. 

  $b = ['a','b']; list($a, $b) = (array)$b;

and get the expected results.
2015-07-20 16:41:53
http://php5.kiev.ua/manual/ru/function.list.html
Автор:
UNDOCUMENTED BEHAVIOR:

    list($a,$b,$c) = null;

in fact works like:

    $a = null; $b = null; $c = null;

...So correspondingly:

    list($rows[]) = null;

Will increment count($rows), just as if you had executed $rows[] = null;

Watch out for this (for example) when retrieving entire tables from a database, e.g.

    while (list($rows[]) = $mysqlresult->fetch_row());

This will leave an extra 'null' entry as the last element of $rows.
2015-12-10 21:20:46
http://php5.kiev.ua/manual/ru/function.list.html
list() can be used with foreach

<?php
$array 
= [[12], [34], [56]];

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
2016-02-05 18:08:48
http://php5.kiev.ua/manual/ru/function.list.html
a simple example of use to swap two variables :

$a = 'hello';
$b = 'world';

list($a, $b) = [$b, $a];

echo $a . ' ' . $b; //display "world hello"

another example :

function getPosition($x, $y, $z)
{
   // ... some operations like $x++...
   return [$x, $y, $z];
}

list($x, $y, $z) = getPosition($x ,$y, $z);
2016-10-23 06:04:36
http://php5.kiev.ua/manual/ru/function.list.html
In PHP 7.1 we can do the following:

<?php
   
[$a$b$c] = ['a''b''c'];
?>

Before, we had to do:

<?php
   
list($a$b$c) = ['a''b''c'];
?>
2017-01-12 22:30:34
http://php5.kiev.ua/manual/ru/function.list.html
Автор:
Since PHP 7.1, keys can be specified

exemple : 
<?php 
$array 
= ['locality' => 'Tunis''postal_code' => '1110'];

list(
'postal_code' => $zipCode'locality' => $locality) = $array;

print 
$zipCode// will output 1110
print $locality// will output Tunis
 
?>
2017-05-17 14:37:58
http://php5.kiev.ua/manual/ru/function.list.html

    Поддержать сайт на родительском проекте КГБ