2012-04-05 23 views
0

私は配列の多次元配列(以下のソース)を持っています。ここで私のキーと値は任意の文字列です。階層構造は同じですが、すべてのKEYは独自の配列に再構成され、キー自体は「タイトル」値になり、サブ配列は「子」の下に続きます(下記参照)新しい配列を作成します。PHP再帰的配列コピー

& $ sourceと& $ destination配列をとる再帰関数を使用してこれをどのようにして達成することができますか?

ソース配列:

Array (
    [Alpha] => Array (
     [Red] => one 
     [Blue] => two 
    ) 
    [Bravo] => Array (
     [Blue] => three 
    ) 
) 

希望アレイ:

Array (
    [0] => Array (
     [title] => Alpha 
     [children] => Array (
        [0] Array([title] => Red, [children]= > false) 
        [1] Array([title] => Blue, [children]= > false) 
     ) 
    ) 
    [1] => Array (
     [title] => Bravo 
        [0] Array([title] => Blue, [children]= > false) 
     ) 
    ) 
) 

注:私は私の新しい配列の最後のノード/リーフを気にしないでください。

答えて

3

宛先配列への参照を渡さずに変換を行うことができます。

function convert_array($from){ 
    if(!is_array($from)){ 
     return false; 
    } 
    $to = array(); 
    foreach($from as $k=>$v){ 
     $to[] = array(
      'title' => $k, 
      'children' => convert_array($v) 
     ); 
    } 
    return $to; 
} 

Codepad example

+0

おかげで、素晴らしい作品。ところで、foreachでは、$を[〜]に比べて$に使うことの意義は何ですか? [〜to]だけがうまくいくようですが、$ toは構文上問題ありません。 – lioman

+1

'$ to []'を使うと配列に要素を追加します( 'array_push'と同じ)、' $ to'を使って毎回配列を上書きします。 –