2016-10-21 19 views
2

私はそのような配列があります。PHP - サブキーにキーをマージする方法1つの配列の

array(
    (int) 1 => array(
     (int) 3 => 'value', 
     (int) 12 => 'value' 
    ), 
    (int) 5 => array(
     (int) 8 => 'value', 
     (int) 10 => 'value', 
     (int) 15 => 'value' 
    ) 
) 

のような何かを得るために、考慮値を考慮せずにサブキーを持つキーをマージするための最良の方法は何をそれ ?

array(
    (int) 0 => (int) 1, 
    (int) 1 => (int) 3, 
    (int) 2 => (int) 12, 
    (int) 3 => (int) 5, 
    (int) 4 => (int) 8, 
    (int) 5 => (int) 10, 
    (int) 6 => (int) 15 
) 

答えて

0

ショートソリューションarray_keysarray_merge機能使用:

$keys = []; 
foreach ($arr as $k => $v) { // $arr is your initial array 
    $keys[] = $k; 
    if (is_array($v)) $keys = array_merge($keys, array_keys($v)); 
} 

print_r($keys); 

出力を:

Array 
(
    [0] => 1 
    [1] => 3 
    [2] => 12 
    [3] => 5 
    [4] => 8 
    [5] => 10 
    [6] => 15 
) 
+0

$ vとは何か、$ kは文脈上意味をなさないが、なぜ文字を保存するために読みやすさを犠牲にする必要があるのか​​? –

+0

「文字」を検索しているのですか? – RomanPerekhrest

+0

私は正当な理由を求めています@RomanPerekhrest - 不要であると思われるだけで、コードの可読性が低下します。 –

0
$newArray = []; 

$arrays = array(
    (int) 1 => array(
     (int) 3 => 'value', 
     (int) 12 => 'value' 
    ), 
    (int) 5 => array(
     (int) 8 => 'value', 
     (int) 10 => 'value', 
     (int) 15 => 'value' 
    ) 
) 

foreach($arrays as $key => $array) { 
    $newArray[] = $key; 
    foreach($array as $key => $item) { 
     $newArray[] = $key; 
    } 
} 
+0

ノート_Just:_ジャック、あなたは答えを削除することができ、その後、元に戻す、その後、それを編集答え。答えを削除して別のものを作成するのではなく、 – RiggsFolly

+0

いいえ、私の悪い@RiggsFolly –

+0

悪いではなく、ちょうど私があなたに知らせてくれると思った – RiggsFolly

0

あなたは、PHP 5と上記のためarray_walk_recursive()を使用することができます。

//$oldArray = your array 
$newArray = []; 

function build_array($item,$key){ 

    global $newArray; 

    $newArray[] = $key; 

} 
array_walk_recursive($oldArray,'build_array'); 
$newArray = array_merge(array_keys($oldArray),$newArray); //needed for the first keys (1,5) as Jory Geerts correctly pointed out. 
+1

グローバルを使うとコードは非常に脆くなるので、 。このような場合は、 'array_walk_recursive($ oldArray、function($ item、$ key)use($ newArray){$ newArray [] = $ key;});'のようにクロージャを使うことができます。 、 "配列を保持するキーは関数に渡されません。" Carilboueは配列の1と5も望んでいるので、このアプローチはうまくいかないでしょう。 –

+0

はい、あなたは正しいです。私は1と5が欠けていた。 –

関連する問題