2011-05-12 28 views
1

私はどのように私はそれを達成ん多次元配列を1次元配列に変換するにはどうすればよいですか?

(["a.x"] => "foo", 
["a.y"] => "bar", 
["b"] => "moo", 
["c.w.z"] => "cow") 

に(PHPで)

(["a"] => (
    ["x"] => "foo", 
    ["y"] => "bar"), 
["b"] => "moo", 
["c"] => (
    ["w"] => (
     ["z"] => "cow") 
     ) 
) 

のようなものを入れたいですか?

+0

としてそれを使用することができますが、それは唯一の3レベルの深または任意でありますレベルが深い? –

+0

それは4レベルよりも深くなることはめったにありませんが、それは任意のレベルです。 –

答えて

7

function flatten($arr, &$out, $prefix='') { 
    $prefix = $prefix ? $prefix . '.' : ''; 
    foreach($arr as $k => $value) { 
     $key = $prefix . $k; 
     if(is_array($value)) { 
      flatten($value, $out, $key); 
     } 
     else { 
      $out[$key] = $value; 
     } 
    } 
} 

をあなたは

$out = array(); 
flatten($array, $out); 
+0

これでオブジェクトの識別子として完全な配列パスを保存するにはどうすればよいですか? –

+0

30秒で私を倒してください。 +1 – moteutsch

+0

@コブラ:あなたは何を意味するのか分かりません。詳しく教えてください。 –

1

あなたがここに素敵な何かを持っている:あなたは再帰関数作成することができhttp://davidwalsh.name/flatten-nested-arrays-php

+0

正しいトラックではあるが、それだけではOPのようなキーは作成されません。 –

+0

あなたは正しいです。フェリックスの方が良いです。 – PJP

関連する問題