使用分隔符从字符串创建嵌套数组

时间:2017-10-06 11:21:06

标签: php

我有一个像brachA-branchB-branchC这样的字符串。我试图将它作为嵌套数组,如下所示

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

我尝试如下(https://3v4l.org/A781D

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

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

print_r($nested_array);

输出我得到如下

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

        )

)

任何想法,如何实现这一目标?

1 个答案:

答案 0 :(得分:3)

可以在foreach返回的反转数组上使用explode()循环来完成,但使用递归函数要容易得多。

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'键下的数组。如果没有休息,它就不会为'sub'键添加任何内容(在最后一次通话中,$piecesarray('brachC')