web-dev-qa-db-fra.com

Est-ce que list () dans le dernier PHP fonctionne avec des tableaux associatifs d'une manière ou d'une autre?

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 faire référence aux clés nommées d'une manière ou d'une autre comme une liste comme list('fruit1' : $fruit1), avez-vous vu quelque chose comme ça prévu pour la prochaine version?

39
rsk82

EDIT: Cette approche était utile à l'époque (on lui a littéralement demandé une réponse il y a plus de sept ans), mais voir la réponse de K-Gun ci-dessous pour un meilleure approche avec la nouvelle syntaxe PHP 7+.

Essayez la fonction extract() . Il 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);
43
landons

Avec/de 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
58
K-Gun

Qu'en est-il de l'utilisation de array_values ​​()?

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

Si vous êtes dans mon cas:

list () ne fonctionne que sur un tableau numérique. Donc, si vous le pouvez, laissez vide dans fetch () ou fetchAll () -> laissez-le avoir 2 options: tableau numérique et tableau associatif. Ça va marcher.

1
Trung Phạm

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;

production: 1, , 3

  • moins de frappe côté utilisation
  • aucun élément ne dépend de l'ordre (contrairement à array_values)
  • contrôle direct sur les noms de variables (contrairement à extract) - risque de collision de noms plus petit, meilleur IDE support
0
Alexander Malakhov