Question

Je veux faire quelque chose qui semble très simple, mais je ne trouve rien à ce sujet :extrayez simplement un sous-ensemble d'un tableau similaire à array_splice, mais utiliser des clés pour récupérer les valeurs :

$data = array('personName' => 'John', 'personAge' => 99, 'personId' => 1,  
              /* many more data I don't need here ... */);

list($name, $age, $id) = array_splice_by_keys($data,
                          array('personName', 'personAge', 'personId');

Si tout le reste échoue, n'existe-t-il pas une fonction intégrée pour filtrer un tableau associatif par clés ?Par exemple:

$filteredArray = array__extract__keys__and__values($srcArray, $arrayOfWantedKeys);

// create a new array with ONLY those key => values I need
$wanted_values = array_extract_keys_and_values($data,
                  array('personName', 'personAge', 'personId');

echo $wanted_values['personName'];  

Je suppose que la raison pour laquelle je veux faire le premier, c'est que je n'aime pas répéter l'accès aux tableaux associatifs partout dans mon code, il semblerait mieux optimisé pour copier les valeurs qui sont beaucoup utilisées (dans une boucle par exemple ), dans une variable locale, et il est également beaucoup plus facile de taper $name que $somearray['name'].

MODIFIER:Merci, je suppose que pour une utilisation avec list, la solution serait

list($x, $y, $z) = array_values(array_intersect_key($array, array_flip($wantedKeys)));

Utilisation intéressante de array_flip !

Était-ce utile?

La solution

dans la version php >= 5.1.0, vous pouvez utiliser array_intersect_key:

$data = array('personName' => 'John', 'personAge' => 99, 'personId' => 1,  
          'test' => 23);
$ex = array('personName'=>0, 'personAge'=>0, 'personId'=>0);
var_dump(array_intersect_key($data, $ex));

valeurs dans $ex peu importe, ils doivent juste être présents.

Autres conseils

C'est essentiellement la même chose que la réponse de SilentGhost, mais cela pourrait être plus facile et probablement un peu plus lent.

array_intersect_key($array, array_flip($wantedKeys));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top