49 votes

La fonction list() de PHP peut-elle fonctionner avec des tableaux associatifs ?

Exemple :

list($fruit1, $fruit2) = array('apples', 'oranges');

Le code ci-dessus fonctionne bien sûr, mais le code ci-dessous :

list($fruit1, $fruit2) = array('fruit1' => 'apples', 'fruit2' => 'oranges');

donne : Notice: Undefined offset: 1 in....

Existe-t-il un moyen de se référer à des clés nommées d'une manière ou d'une autre avec une liste du type list('fruit1' : $fruit1) Avez-vous vu quelque chose de ce genre prévu pour une version future ?

83voto

Qeremy Points 3719

Avec/depuis PHP 7.1 ;

$array = ['fruit1' => 'apple', 'fruit2' => 'orange'];

// [] style
['fruit1' => $fruit1, 'fruit2' => $fruit2] = $array;

// list() style
list('fruit1' => $fruit1, 'fruit2' => $fruit2) = $array;

print $fruit1; // apple

50voto

landons Points 6672

EDITAR: Cette approche était utile à l'époque (la question a été posée et répondue il y a neuf ans), mais voir l'article de K-Gun réponse ci-dessous pour une meilleure approche avec la nouvelle syntaxe de PHP 7+.

Essayez le extract() fonction. Elle créera des variables de toutes vos clés, affectées à leurs valeurs associées :

extract(array('fruit1' => 'apples', 'fruit2' => 'oranges'));
var_dump($fruit1);
var_dump($fruit2);

48voto

Broom Points 513

Et si vous utilisiez array_values() ?

<?php
   list($fruit1, $fruit2) = array_values( array('fruit1'=>'apples','fruit2'=>'oranges') );
?>

0voto

Alexander Malakhov Points 1167

C'est assez simple à mettre en œuvre.

function orderedValuesArray(array &$associativeArray, array $keys, $missingKeyDefault = null)
{
    $result = [];
    foreach ($keys as &$key) {
        if (!array_key_exists($key, $associativeArray)) {
            $result[] = $missingKeyDefault;
        } else {
            $result[] = $associativeArray[$key];
        }
    }
    return $result;
}
$arr = [
    'a' => 1,
    'b' => 2,
    'c' => 3
];
list($a, $b, $c) = orderedValuesArray($arr, ['a','AAA', 'c', 'b']);
echo $a, ', ', $b, ', ', $c, PHP_EOL;

sortie : 1, , 3

  • moins de saisie du côté de l'utilisation
  • aucune dépendance de l'ordre des éléments (contrairement à array_values )
  • un contrôle direct sur les noms des variables (contrairement à extract ) - risque moindre de collision de noms, meilleur support IDE

0voto

Trung Phạm Points 5

Si vous êtes dans mon cas :

list() ne fonctionne que sur les tableaux numériques. Donc si vous le pouvez, laissez un blanc dans fetch() ou fetchAll() -> laissez-lui 2 options : tableau numérique et tableau associatif. Cela fonctionnera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X