我有一个像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] =>
)
)
)
任何想法,如何实现这一目标?
答案 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'
键添加任何内容(在最后一次通话中,$pieces
为array('brachC')
。