2016-08-29 11 views
1

キーに基づいて別の配列に配列を展開したいと思います。例えば文字列を多次元配列に分解する

[ 
    { 
    "key": "menu.company.footer", 
    "content": "this is an example" 
    }, 
    { 
    "key": "menu.company.home.foo", 
    "content": "bar" 
    } 
] 

はなる:

[ 
    { 
    "menu": 
    { 
     "company": 
     { 
     "footer": "this is an example" 
     } 
    } 
    }, 
    { 
    "menu": 
    { 
     "company": 
     { 
     "home": 
     { 
      "foo": "bar" 
     } 
     } 
    } 
    } 
] 

ここでは、私がやっていることです:

  1. foreachキーを爆発
  2. 私のアレイを介しを完了
  3. は、爆発の数とのために行わ

私の質問私はそこにありますどのように多くのレベルがわからないので、動的に親/子システムを作成する方法です。

+0

あなたの解決策は寸法に制限されていないと思います。爆発した部品のすべてを使用する場合は、任意の数の寸法を作成することができます。 –

+0

私はそれをチェックするつもりでしたが、少なくとも使用可能な配列を投稿する必要があります。 – AbraCadaver

+0

@AbraCadaver:申し訳ありませんが、私は配列を更新しました – tomprouvost

答えて

2

これは少し捻じれた頻繁な質問です。これは動作します:

foreach($array as $k => $v) { 
    $temp = &$result[$k]; 
    $path = explode('.', $v['key']); 

    foreach($path as $key) { 
     $temp = &$temp[$key]; 
    } 
    $temp = $v['content']; 
} 
print_r($result); 

参照&を使用して、あなたはより深くネストされた要素に毎回$temp変数を設定し、ちょうど$tempに追加することができます。

  • ループ配列を通って、爆発した値によって各key要素
  • ループを爆発し、あなたが最後に
  • を行くように入れ子のキーを持つ配列を作成し、content要素
  • に多次元配列の値を設定します

How to write getter/setter to access multi-level array by key names?も参照してください。