PHP转换树结构中字符串的关联数组
我有一个路径列表(只是字符串),如下所示:PHP转换树结构中字符串的关联数组,php,tree,Php,Tree,我有一个路径列表(只是字符串),如下所示: $data = array( array('path' => 'foo/bar/baz'), array('path' => 'foo/bar/baz/qux'), array('path' => 'foo/bar'), array('path' => 'bar/baz/foo'), array('path' => 'baz'), ); 我希望实现这样的结构 Array (
$data = array(
array('path' => 'foo/bar/baz'),
array('path' => 'foo/bar/baz/qux'),
array('path' => 'foo/bar'),
array('path' => 'bar/baz/foo'),
array('path' => 'baz'),
);
我希望实现这样的结构
Array
(
[foo] => Array
(
[bar] => Array
(
[baz] => Array
(
[qux] => null
)
)
)
[bar] => Array
(
[baz] => Array
(
[foo] => null
)
)
[baz] => null
)
旁注
null
(null
对于我来说将没有孩子)你能不能给我一些建议,在不破坏否决票的情况下?我非常接近,但结尾不是
null
,而是大小为0的数组
<?php
function ProcessPath($entry,$depth,&$current)
{
if($depth<count($entry))
{
$key = $entry[$depth];
if(!isset($current[$key]))$current[$key] = null;
ProcessPath($entry,$depth+1,$current[$key]);
}
}
$data = array(
array('path' => 'foo/bar/baz'),
array('path' => 'foo/bar/baz/qux'),
array('path' => 'foo/bar'),
array('path' => 'bar/baz/foo'),
array('path' => 'baz'),
);
$result = null;
foreach($data as $path)
{
ProcessPath(explode("/",$path['path']),0,$result);
}
print_r($result);
?>
基本上,ProcessPath的功能是:
- 分割路径的数组
- 当前深度,例如:
(0)或[foo]
(1)或foo>[bar]
(2)foo>bar>[baz]
- 对路径在数组中放置位置的引用(由
和$reference表示)
$key
,以简化其余代码
这就是神奇发生的地方,如果输出没有设置当前路径段,它就会设置它
最后一行递归到路径
$entry
中的下一个元素,方法是采用相同的$entry
,将$depth
增加1,并将$current
更改为新的节$current[$key]
您可以做的是迭代路径,分解每个路径的字符串,然后根据值的位置将每个值添加到新数组中。如果值是第一个,那么它将是基础。如果是第二个,那么它将作为第一个数组中的新数组,依此类推。我看不到数组后面的模式以及预期的输出。因为在您创建的最后:[baz]=>
但是您已经有了一个以这个开头的。@Rizier123叶将是null
(null
对于我来说将没有子项)您正在尝试将该数组按原样转换为所需的数组,对吗?如果这不起作用,只需更改[]
到数组()
(可能是语言错误)非常感谢。我编辑了答案以支持旧版本的php@SimoneNigro我刚刚添加了一个描述,所以它可能会清除您的编辑。我在晚上添加了array()s
,然后重新编辑(不知道你可以直接在那里敲打一个null
)。现在应该给你想要的输出是完美的,它完全符合我的要求
Array
(
[foo] => Array
(
[bar] => Array
(
[baz] => Array
(
[qux] =>
)
)
)
[bar] => Array
(
[baz] => Array
(
[foo] =>
)
)
[baz] =>
)