vacio recorrer multidimensional manejo extraer elementos ejemplos datos asociativo array agregar php arrays associative-array

recorrer - Extracción de un subconjunto de valores de una matriz asociativa(php)



manejo de array en php (2)

Quiero hacer algo aparentemente muy simple, pero no puedo encontrar nada al respecto: simplemente extraiga un subconjunto de una matriz similar a array_splice, pero usando claves para recuperar los valores :

$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 todo lo demás falla, ¿no hay una función incorporada para filtrar una matriz asociativa por claves? Por ejemplo:

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

Supongo que la razón por la que quiero hacer la primera, es que no me gusta repetir el acceso de conjunto asociativo en todo mi código, parecería mejor optimizado para copiar los valores que se usan mucho (en un bucle, por ejemplo, ), en una variable local, además de que es mucho más fácil escribir $ name que $ somearray [''name''].

EDITAR: Gracias, supongo que para usar con la lista, la solución sería

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

¡Un uso interesante de array_flip!


en la versión php> = 5.1.0 podrías usar 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));

los valores en $ex no importan, solo tienen que estar presentes.


Esto es esencialmente lo mismo que la respuesta de SilentGhost, pero esto podría ser más fácil, y probablemente un poco más lento.

array_intersect_key($array, array_flip($wantedKeys));