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