Php çok boyutlu dizideki tüm ikinci seviye anahtarlarını bulmak

6 Cevap php

Ben kullanılan anahtarların ikinci düzey bir listesini oluşturmak istiyorum. Her kayıt, aynı tuşları içermiyor. Ama tüm tuşları ne olduğunu bilmek gerekir. array_keys () sadece numaralarının bir listesini verir, çalışmaz.

Esasen Im arıyor çıktı:

aksiyon, id, onaylamak, Taban, Ebase, Ftype, Miktar, Tip, Etiket, Unit

Ben formata uygun bir büyük ve çok boyutlu bir dizi var:

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

Yardımın için teşekkürler!

6 Cevap

<?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);
}

?>

edit: kaldırıldı gereksiz array_reverse () fonksiyonu

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

İstediğin ne yapmalıyım.

Ne bu böyle bir şey:

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

Tabii ki, bu tüm alt-diziler aynı tuşları düşünüyor; Bu durumda, yalnızca ilk alt-dizide (no need to iterate over all first-level sub-arrays, I guess) tuşlarını gerekir


And, as a shortened / simplified example :

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

Alacak:

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

You can kullanımı implode istedi dize almak için:

echo implode(', ', $your_keys);

alacak:

action, id, base

yani, birinci alt-dizinin anahtarları listesi.

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

Tüm değerleri Birleştirme ve çıkan anahtarları almak.

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;
    }

Bu fonksiyonu deneyin. İstediğiniz gibi dönecektir.

Belki size dizi yineleme önlemek ve değerler olarak gereken tuşları ile bir dizi dönmek için izin verir array_map işlevini kullanabilirsiniz.

Bu gibi olacak

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