valor multidimensional index functions extraer datos buscar array_map array_column array php arrays multidimensional-array key

multidimensional - php array functions



Encuentra todas las claves de segundo nivel en una matriz multidimensional en PHP (9)

¿Qué tal algo como esto?

$your_keys = array_keys($your_array[0]);

Por supuesto, esto está considerando que todas las subarreglas tienen las mismas claves; en este caso, solo necesita las claves de la primera sub-matriz (supongo que no es necesario iterar sobre todas las sub-matrices de primer nivel)


Y, como ejemplo abreviado / simplificado:

$your_array = array( array( ''action'' => ''A'', ''id'' => 1, ''base'' => array(''id'' => 145), ), array( ''action'' => ''B'', ''id'' => 2, ''base'' => array(''id'' => 145), ), array( ''action'' => ''C'', ''id'' => 3, ''base'' => array(''id'' => 145), ) ); $your_keys = array_keys($your_array[0]); var_dump($your_keys);

Te conseguiré:

array 0 => string ''action'' (length=6) 1 => string ''id'' (length=2) 2 => string ''base'' (length=4)

Puedes usar implode para obtener la cadena que solicitaste:

echo implode('', '', $your_keys);

te conseguirá

action, id, base

Es decir, la lista de las claves de la primera sub-matriz.

Quiero generar una lista del segundo nivel de claves utilizadas. Cada registro no contiene todas las mismas claves. Pero necesito saber cuáles son todas las claves. array_keys () no funciona, solo devuelve una lista de números.

Esencialmente la salida que estoy buscando es:

acción, id, validar, Base, Ebase, Ftype, Cantidad, Tipo, Etiqueta, Unidad

Tengo una gran matriz multidimensional que sigue el formato:

Array ( [0] => Array ( [action] => A [id] => 1 [validate] => yes [Base] => Array ( [id] => 2945 ) [EBase] => Array ( [id] => 398 ) [Qty] => 1 [Type] => Array ( [id] => 12027 ) [Label] => asfhjaflksdkfhalsdfasdfasdf [Unit] => asdfas ) [1] => Array ( [action] => A [id] => 2 [validate] => yes [Base] => Array ( [id] => 1986 ) [FType] => Array ( [id] => 6 ) [Qty] => 1 [Type] => Array ( [id] => 13835 ) [Label] => asdssdasasdf [Unit] => asdger ) )

¡Gracias por la ayuda!


Con esta función puede obtener todas las claves de una matriz multidimensional

function arrayKeys($array, &$keys = array()) { foreach ($array as $key => $value) { $keys[] = $key; if (is_array($value)) { $this->arrayKeys($value, $keys); } } return $keys; }


Mientras que @raise responde proporciona un acceso directo, falla con las teclas numéricas. Lo siguiente debería resolver esto:

$secondKeys=array_unique(call_user_func_array(''array_merge'', array_map(''array_keys'',$a)));

array_map(''array_keys'',$a) : recorre mientras obtiene las claves

...''array_merge''... : Combina la matriz de claves

array_unique(... : (opcional) Obtener claves únicas.

Espero que esto ayude a alguien.

ACTUALIZAR:

Alternativamente puedes usar

$secondKeys=array_unique(array_merge(...array_map(''array_keys'', $a)));

Eso proporciona la misma respuesta que el anterior, y mucho más rápido.


Quizás pueda usar la función array_map, que le permite evitar la iteración de matriz y devolver una matriz con las claves que necesita como valores.

será así

$newArray = array_map(function($value){return array_keys($value);},$yourArray); var_dump($newArray); array (size=2) 0 => array (size=9) 0 => string ''action'' (length=6) 1 => string ''id'' (length=2) 2 => string ''validate'' (length=8) 3 => string ''Base'' (length=4) 4 => string ''EBase'' (length=5) 5 => string ''Qty'' (length=3) 6 => string ''Type'' (length=4) 7 => string ''Label'' (length=5) 8 => string ''Unit'' (length=4) 1 => array (size=9) 0 => string ''action'' (length=6) 1 => string ''id'' (length=2) 2 => string ''validate'' (length=8) 3 => string ''Base'' (length=4) 4 => string ''FType'' (length=5) 5 => string ''Qty'' (length=3) 6 => string ''Type'' (length=4) 7 => string ''Label'' (length=5) 8 => string ''Unit'' (length=4)


Un trazador de líneas:

$keys=array_unique(array_reduce(array_map(''array_keys'',$data),''array_merge'',[]));

O en una función:

function get_array_children_keys($data) { return array_unique( array_reduce(array_map(''array_keys'', $data), ''array_merge'', []) ); }

Ahora vamos a desglosar esto con un ejemplo, aquí hay algunos datos de muestra:

[ [''key1'' => 0], [''key1'' => 0, ''key2'' => 0], [''key3'' => 0] ]

Comenzando con la función más interna, ejecutamos array_map con la función array_keys:

array_map(''array_keys'', $data)

Esto nos da las claves de todos los arreglos infantiles.

[ [''key1''], [''key1'', ''key2''], [''key3''] ]

Luego ejecutamos array_reduce en los datos con la devolución de llamada array_merge y una matriz vacía como valor inicial:

array_reduce(..., ''array_merge'', []);

Esto convierte nuestras matrices múltiples en 1 matriz plana:

[ ''key1'', ''key1'', ''key2'', ''key3'' ]

Ahora eliminamos nuestros duplicados con array_unique:

array_unique(...)

Y terminaremos con todas nuestras llaves:

[ ''key1'', ''key2'', ''key3'' ]


foreach($bigArray as $array){ foreach($array as $key=>$value){ echo $key; } }

Eso debería hacer lo que quieras.


function __getAll2Keys($array_val){ $result = array(); $firstKeys = array_keys($array_val); for($i=0;$i<count($firstKeys);$i++){ $key = $firstKeys[$i]; $result = array_merge($result,array_keys($array_val[$key])); } return $result; }

prueba esta función Volverá como quieras.


array_keys(call_user_func_array(''array_merge'', $a));

Combina todos los valores y recupera las claves resultantes.


<?php // Gets a list of all the 2nd-level keys in the array function getL2Keys($array) { $result = array(); foreach($array as $sub) { $result = array_merge($result, $sub); } return array_keys($result); } ?>

edición: se eliminó la función array_reverse () superfluo