Quiero generar una lista de los de segundo nivel de las claves que se utilizan. Cada registro no contiene todas las mismas claves. Pero necesito saber qué todas las claves son. array_keys() no funciona, sólo se devuelve una lista de números.

Esencialmente la salida, estoy buscando es:

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

Tengo un gran multi-dimensional de la matriz 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!

InformationsquelleAutor user103219 | 2009-09-21

9 Comentarios

  1. 20
    <?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: eliminado superfluo array_reverse() función

    • Funciona muy bien, no hay necesidad de comprobar los valores, para repetir las teclas!
    • Por qué el llamado a array_reverse()?
    • resulta que las claves en valores – así que array_merge() se fusionará todas las claves juntos
    • array_merge() combina cualquier no-teclas numéricas compartida entre las matrices y array_reverse() sólo se invierte el orden de las teclas. Su función funciona igual de bien sin array_reverse()
    • tienes razón – quizás es el momento de encender la máquina de café…
    • Trabajó como un encanto.Agradable ,limpio y muy sencillo también.

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

    Que debe hacer lo que quiera.

    • gracias inkedmn – yo tenía el primer intento de su primera versión (antes de su edición) y que obviamente no funcionó. Este trabajó muy bien, entonces con un simple si la instrucción para la comprobación de duplicados y yo tenía mis datos.
  3. 5

    ¿Qué pasa con algo como esto :

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

    Por supuesto, esto es teniendo en cuenta todos los sub-matrices tienen las mismas claves ; en este caso, usted sólo necesita las llaves de la primera sub-matriz (no es necesario iterar sobre todos los de primer nivel sub-matrices, supongo)


    Y, como una abreviado y simplificado ejemplo :

    $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);

    Obtendrá :

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

    Puede utilizar la implosión de la para obtener la cadena que usted solicitó :

    echo implode(', ', $your_keys);

    obtendrá :

    action, id, base

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

    • Gracias a Pascal por desgracia cada matriz no contiene las mismas claves.
    • Ho, muy malo 🙁 En este caso, ¿qué acerca del uso array_keys en cada sub-matriz y, a continuación, array_merge en las listas de las llaves de los sub-matrices ?
  4. 4

    Uno forro:

    $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 permite romper esto con un ejemplo, he aquí algunos datos de la muestra:

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

    De partida con el interior de la mayoría de la función, podemos ejecutar array_map con el array_keys función:

    array_map('array_keys', $data)

    Esto nos da las claves de todos los niños matrices

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

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

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

    Esto convierte a nuestras múltiples matrices en 1 plano de la matriz:

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

    Ahora nos tira de nuestra duplicados con array_unique:

    array_unique(...)

    Y terminar con todas las llaves:

    [
        'key1',
        'key2',
        'key3'
    ]
  5. 1
    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;
        }

    probar esta función. Volverá como usted desea.

  6. 1

    Mientras que @plantear respuestas proporciona un acceso directo, se produce un error con el teclado numérico. El siguiente debe resolver este:

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

    array_map('array_keys',$a) : El bucle a través mientras que la obtención de las claves

    ...'array_merge'... : Combinación de la matriz de claves

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

    Espero que ayude a alguien.

    ACTUALIZACIÓN:

    Alternativamente, usted puede utilizar

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

    Que proporciona la misma respuesta como la anterior, y mucho más rápido.

  7. 0

    Tal vez usted puede utilizar array_map función, que le permite evitar la matriz de iteración y devuelve un array con las claves que necesita como valores.

    será como este

    $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)
    • que sólo los interruptores de las claves para ser los valores
  8. 0

    Con esta función usted 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;
    }

Dejar respuesta

Please enter your comment!
Please enter your name here