The 5th Annual China PHP Conference

list

(PHP 4, PHP 5, PHP 7)

listAssegna valori a delle variabili come se fossero un array

Descrizione

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

Come array(), questa non è in realtà una funzione, bensì un costrutto del linguaggio. list() è usata per assegnare valori ad una lista di variabili in una sola operazione.

Nota:

list() funziona solo su array numerici e si aspetta che gli indici numerici partano da 0.

Avviso

In PHP 5, list() assegna i valori partendo dal parametro più a destra. In PHP 7, list() comincia dal parametro più a sinistra.

Se si stanno usando variabili semplici, non ci si deve preoccupare di questo comportamento. Ma se si stanno usando array con indici ci si aspetta che l'ordine degli indici nell'array sia lo stesso scritto nella funzione list() da sinitra a destra; non è il caso in PHP 5, dal momento che sono assegnati in ordine inverso.

In generale, è sconsigliato fare affidamento su uno specifico ordine di operazioni, dal momento che questo può cambiare in futuro.

Avviso

La modifica dell'array durante l'esecuzione di list() (es. usando list($a, $b) = $b ha un comportamento indefinito.

Elenco dei parametri

var1

Una variabile.

Valori restituiti

Restituisce l'array assegnato.

Esempi

Example #1 esempio di list()

<?php

$info 
= array('caffè''scuro''caffeina');

// assegna a tutte le variabili
list($bevanda$colore$componente) = $info;
echo 
"Il $bevanda è $colore e la $componente lo rende speciale.\n";

// assegna solo in parte
list($bevanda, , $componente) = $info;
echo 
"Il $bevanda ha la $componente.\n";

// oppure assegnamo solo l'ultima variabile
list( , , $componente) = $info;
echo
"Ho voglia di $componente!\n";

// list() non funziona con le stringhe
list($bar) = "abcde";
var_dump($bar); // NULL
?>

Example #2 Esempio di uso di list()

<table>
 <tr>
  <th>Nome dell'impiegato</th>
  <th>Stipendio</th>
 </tr>

<?php
$risultato 
$pdo_query("SELECT id, nome, stipendio FROM impiegati");
while (list(
$id$nome$stipendio) = $result->fetch(PDO::FETCH_NUM)) {
    echo (
" <tr>\n".
          
"  <td><a href=\"info.php?id=$id\">$nome</a></td>\n".
          
"  <td>$stipendio</td>\n".
          
" </tr>\n");
}

?>

</table>

Example #3 Utilizzare list() annidate

<?php

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

var_dump($a$b$c);

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

Example #4 Utilizzo di list() con gli indici

<?php

$info 
= array('caffè''nero''caffeina');

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

var_dump($a);

?>

Restituisce il seguente risultato (si noti l'ordine degli elementi rispetto all'ordine con cui sono stati scritti nella sintassi di list()).

Output of the above example in PHP 7:

array(3) {
  [2]=>
  string(8) "caffeina"
  [1]=>
  string(4) "nero"
  [0]=>
  string(5) "caffè"
}

Output of the above example in PHP 5:

array(3) {
  [2]=>
  string(8) "caffeine"
  [1]=>
  string(5) "brown"
  [0]=>
  string(6) "coffee"
}

Example #5 list() e ordine delle definizioni dell'indice

L'ordine con il quale sono definiti gli indici dell'array da consumare da parte di list() è irrilevante.

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

Restituisce il seguente risultato (si noti l'ordine degli elementi in rapporto a quello con cui sono scritti nella sintassi di list()):

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"

Vedere anche:

  • each() - Restituisce la corrente coppia chiave/valore di un array e incrementa il puntatore dell'array
  • array() - Crea un array
  • extract() - Importa le variabili nella tabella dei simboli

add a note add a note

User Contributed Notes 14 notes

up
58
chris at chlab dot ch
4 years ago
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"
?>
up
43
megan at voices dot com
3 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);
/* outputs
string(3) "bob"
string(5) "12345"
string(0) ""
string(0) ""
*/
?>
up
37
svennd
4 years ago
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
?>
up
4
carlosv775 at gmail dot com
4 months 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'];
?>
up
20
grzeniufication
2 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.
up
12
pemapmodder1970 at gmail dot com
1 year 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
up
12
john at jbwalker dot com
3 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'
up
4
Dean
1 year 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.
up
1
Rhamnia Mohamed
6 days 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; // will output 1110
print $locality; // will output Tunis
?>
up
-1
vickyssj7 at gmail dot com
2 years ago
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"
}
up
-1
Colin Guthrie
1 year 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.
up
-1
anthony dot ossent at live dot fr
7 months 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);
up
-9
mogwai512
1 year ago
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);

?>
up
-14
Achilles at thegreatwarrior dot com
3 years ago
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;
To Top