A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from http://php.net/manual/en/function.list.php below:

PHP: list - Manual

list

(PHP 4, PHP 5, PHP 7, PHP 8)

listAssign variables as if they were an array

Description

Note:

Before PHP 7.1.0, list() only worked on numerical arrays and assumes the numerical indices start at 0.

As of PHP 7.1.0, list() can also contain explicit keys, allowing for the destructuring of arrays with non-integer or non-sequential keys. For more details on array destructuring, see the array destructuring section.

Parameters
var

A variable.

vars

Further variables.

Return Values

Returns the assigned array.

Changelog Version Description 7.3.0 Support for reference assignments in array destructuring was added. 7.1.0 It is now possible to specify keys in list(). This enables destructuring of arrays with non-integer or non-sequential keys. Examples

Example #1 list() examples

<?php

$info

= array('coffee', 'brown', 'caffeine');// Listing all the variables
list($drink, $color, $power) = $info;
echo
"$drink is $color and $power makes it special.\n";// Listing some of them
list($drink, , $power) = $info;
echo
"$drink has $power.\n";// Or let's skip to only the third one
list( , , $power) = $info;
echo
"I need $power!\n";// list() doesn't work with strings
list($bar) = "abcde";
var_dump($bar); // NULL
?>

Example #2 An example use of list()

<?php
$result
= $pdo->query("SELECT id, name FROM employees");
while (list(
$id, $name) = $result->fetch(PDO::FETCH_NUM)) {
echo
"id: $id, name: $name\n";
}
?>

Example #3 Using nested list()

<?phplist($a, list($b, $c)) = array(1, array(2, 3));var_dump($a, $b, $c);?>

The above example will output:

The order in which the indices of the array to be consumed by list() are defined is irrelevant.

Example #4 list() and order of index definitions

<?php
$foo
= array(2 => 'a', 'foo' => 'b', 0 => 'c');
$foo[1] = 'd';
list(
$x, $y, $z) = $foo;
var_dump($foo, $x, $y, $z);

Gives the following output (note the order of the elements compared in which order they were written in the list() syntax):

array(4) {
  [2]=>
  string(1) "a"
  ["foo"]=>
  string(1) "b"
  [0]=>
  string(1) "c"
  [1]=>
  string(1) "d"
}
string(1) "c"
string(1) "d"
string(1) "a"

Example #5 list() with keys

As of PHP 7.1.0 list() can now also contain explicit keys, which can be given as arbitrary expressions. Mixing of integer and string keys is allowed; however, elements with and without keys cannot be mixed.

<?php
$data
= [
[
"id" => 1, "name" => 'Tom'],
[
"id" => 2, "name" => 'Fred'],
];
foreach (
$data as ["id" => $id, "name" => $name]) {
echo
"id: $id, name: $name\n";
}
echo
PHP_EOL;
list(
1 => $second, 3 => $fourth) = [1, 2, 3, 4];
echo
"$second, $fourth\n";

The above example will output:

id: 1, name: Tom
id: 2, name: Fred

2, 4
See Also carlosv775 at gmail dot com

8 years ago

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'];
?>

Rhamnia Mohamed

7 years ago

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; print $locality; ?>
grzeniufication

10 years ago

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.

megan at voices dot com

11 years ago

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_merge( explode( '=', $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_pad( explode( '-', $parameter ), 4, '' );
var_dump($name, $id, $fav_color, $age);
?>

chris at chlab dot ch

12 years ago

The example states the following:
<?php
list($bar) = "abcde";
var_dump($bar);
?>

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);
?>

grzeniufication

7 years ago

<?php
$a = [ 1, 2, 3, 4 ];echo "Unpack all values\n";
list(
$v1, $v2, $v3, $v4) = $a;
echo
"$v1, $v2, $v3, $v4\n";
unset(
$v1, $v2, $v3, $v4);echo "Skip middle\n";
list(
$v1, , , $v4) = $a;
echo
"$v1, $v2, $v3, $v4\n";
unset(
$v1, $v2, $v3, $v4);

echo

"Skip beginning\n";
list( , ,
$v3, $v4) = $a;
echo
"$v1, $v2, $v3, $v4\n";
unset(
$v1, $v2, $v3, $v4);

echo

"Skip end\n";
list(
$v1, $v2, , ) = $a;
echo
"$v1, $v2, $v3, $v4\n";
unset(
$v1, $v2, $v3, $v4);

echo

"Leave middle\n";
list( ,
$v2, $v3, ) = $a;
echo
"$v1, $v2, $v3, $v4\n";
unset(
$v1, $v2, $v3, $v4);
nek dot dev at gmail dot com

2 years ago

It can be convenient to specify a default value in case an element is missing in the list. You can use operator + for this:

<?php
$someArray
= ['color' => 'orange'];
[
'color' => $color, 'size' => $size] = $someArray + ['color' => null, 'size' => null];
?>


This will avoid the warning `Undefined array key "size"` you would encounter otherwise.
pemapmodder1970 at gmail dot com

9 years ago

list() can be used with foreach

<?php
$array
= [[1, 2], [3, 4], [5, 6]];

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
john at jbwalker dot com

11 years ago

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'
diyor024 at gmail dot com

3 years ago

Don't miss simple array pattern matching since php 7

<?php[$a] = ['hello!'];
var_dump($a); $arr = [4 => 50];
[
4 => $fifty] = $arr;
var_dump($fifty); $multidimensionalArray = [['id' => 15, 'email' => 'diyor024@gmail.com']];
[[
'id' => $id, 'email' => $email]] = $multidimensionalArray;
var_dump($id, $email); ?>

vike2000 at gmail dot com

5 years ago

Setting it like <?php 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
svennd

12 years ago

The list() definition won't throw an error if your array is longer then defined list.
<?phplist($a, $b, $c) = array("a", "b", "c", "d");var_dump($a); var_dump($b); var_dump($c); ?>
mark at manngo dot net

4 years ago

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:

<?php
$data
=[
0=> 160,
1 => 120,
2 => 2,
3 => 'width="160" height="120"',
'mime' => 'image/jpeg'
];
list(
0=>$width,1=>$height,2=>$type,3=>$dimensions,'mime'=>$mime)=$data;
?>


Here, the numeric keys also need to be specified, as if the whole array is treated as an associative array.

As noted elsewhere, the list() operator can be written in array format:

<?php
[0=>$width,1=>$height,2=>$type,3=>$dimensions,'mime'=>$mime]=$data;
?>

petru at fuxspam dot xtremeweb dot ro

7 years ago

This is something I haven't seen in documentation.

Since PHP 7.1, you can use short-hand list unpacking using square brackets, just like short-hand array declaration:

<?php

$foo

= ['a', 'b', 'c'];[$a, $b, $c] = $foo;
echo
$a; list($x, $y, $z) = $foo;
echo
$x; ?>

blazej

7 years ago

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.

<?php
$data
= [
[
"id" => 1, "name" => 'Tom'],
[
"id" => 2, "name" => 'Fred'],
];
list("id" => $id1, "name" => $name1) = $data[0];["id" => $id1, "name" => $name1] = $data[0];foreach ($data as list("id" => $id, "name" => $name)) {
}foreach ($data as ["id" => $id, "name" => $name]) {
}

Paul Marti

5 years ago

Since 7.1.0, you can use an array directly without list():

<?php
[$test, $test2] = explode(",", "hello, world");
echo
$test . $test2; ?>

anthony dot ossent at live dot fr

8 years ago

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

contato at tobias dot ws

7 years ago

Since PHP 7.1 the [] may now be used as an alternative to the existing list() syntax:

<?php
[$number, $message] = explode('|', '123|Hello World!');
?>

Colin Guthrie

9 years ago

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.

xmgr2 at protonmail dot com

4 months ago

... and it also supports pushing items onto arrays.

I couldn't find any official documentation on this behavior, but it appears that you can "push" elements onto arrays directly using array destructuring assignments.

<?php
$users
= [
[
1, 'Alice', 'alice@example.com', 'secret123'],
[
2, 'Bob', 'bob@example.com', 'pass456'],
[
3, 'Charlie', 'charlie@example.com', 'hunter678'],
];
$ids = [];
$names = [];
$emails = [];
$passwords = [];

foreach (

$users as $user) {
[
$ids[], $names[], $emails[], $passwords[]] = $user;
}
?>


For well-documented alternatives, consider using array_column(), which does quite the same:

<?php
$ids
= array_column($users, 0);
$names = array_column($users, 1);
$emails = array_column($users, 2);
$passwords = array_column($users, 3);
?>

Mardaneus

6 years ago

Unless you specify keys when using list() it expects the array being fed into it to start at 0.

So having the following code will result in a notice level warning "Undefined offset: 0" and variables not filling as expected

<?php
list($c1, $c2, $c3) = array [1 =>'a', 2 => 'b', 3 => 'c'];var_dump($c1); var_dump($c2); var_dump($c3); ?>

Dean

9 years ago

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.

fredsaavedra at hotmail dot com

5 years ago

Easy way to get actual date and time values in variables.

list($day,$month,$year,$hour,$minute,$second) = explode('-',date('d-m-Y-G-i-s'));


echo "$day-$month-$year $hour".":".$minute.":".$second;

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.3