2017-10-06 11 views
1

を持つ文字列からネストされた配列を作成し、私はbrachA-branchB-branchCなどのような文字列があります。区切り

[ 
    'name'=>'brachA', 
    'sub'=> [ 
      'name'=>'brachB', 
      'sub'=>[ 
       'name'=>'brachC' 
       ] 
      ] 
] 

を次のように私は次のように私はどのように、

<?php 
$nested_array = array(); 
$temp = &$nested_array; 
$item = 'brachA-branchB-branchC'; 

foreach (explode('-', $item) as $key => $value) { 
     $temp = &$temp[$value]; 
} 

print_r($nested_array); 

https://3v4l.org/A781D

Array 
(
    [brachA] => Array 
     (
      [branchB] => Array 
       (
        [branchC] => 
       ) 

     ) 

) 

任意のアイデアを次のように私は取得しています出力をしようとしたネストされた配列としてそれを作るしようとしていますこれを実現しますか?

答えて

3

おそらくによって返された逆配列上のループをforeachループを使用して実行できますが、再帰関数を使用する方がはるかに簡単です。

function makeArray(array $pieces) 
{ 
    $first = array_shift($pieces); 

    $array = array('name' => $first); 
    if (count($pieces)) { 
     $array['sub'] = makeArray($pieces); 
    } 

    return $array; 
} 

$item = 'brachA-branchB-branchC'; 
print_r(makeArray(explode('-', $item))); 

makeArray()関数は、文字列ピースを含む配列を受け取ります。これは、新しい配列の'name'キーの下で最初の項目を置き、'sub'キーの下に置くために配列を生成するために、配列の残りの部分と自分自身を呼び出します。全く休みがない場合は、最後の呼び出しで、$piecesarray('brachC')ある('sub'キーのために何を入れていません。