Php 使用节点值将平面数组转换为多维数组
我有一个类似这样的数组(示例改为food——它实际上是业务主题标记的分类法): 我想使用递归(大概)将其更改为:Php 使用节点值将平面数组转换为多维数组,php,arrays,recursion,multidimensional-array,Php,Arrays,Recursion,Multidimensional Array,我有一个类似这样的数组(示例改为food——它实际上是业务主题标记的分类法): 我想使用递归(大概)将其更改为: Array ( [fruit] => Array ( [title] => Fruit [children] => Array ( [apple] => Array (
Array
(
[fruit] => Array
(
[title] => Fruit
[children] => Array
(
[apple] => Array
(
[title] => Apple
)
[banana] => Array
(
[title] => Banana
)
[passion-fruit] => Array
(
[title] => Passion fruit
)
)
)
[vegetable] => Array
(
[title] => Vegetable
[children] => Array
(
[beans] => Array
(
[title] => Beans
[children] => Array
(
[runner-beans] => Array
(
[title] => Runner beans
)
)
)
)
)
)
我不知道怎么做。我在这里找到了其他将扁平数组转换为多维数组的示例,但在有值('Title')和自定义子节点的情况下没有。提前感谢您提供的所有指针。假设您的数组名为
$array
:
$result = array();
foreach($array as $key => $value) {
$temp =& $result;
$path = explode('/', $key);
foreach($path as $subkey) {
if(!isset( $temp[$subkey])) {
$temp[$subkey]['title'] = $value;
$temp[$subkey]['children'] = array();
}
$temp =& $temp[$subkey]['children'];
}
}
即使没有子项,它也会创建一个
children
键,但我还是发布了这篇文章。我将重新访问并编辑。假设您的数组名为$array
:
$result = array();
foreach($array as $key => $value) {
$temp =& $result;
$path = explode('/', $key);
foreach($path as $subkey) {
if(!isset( $temp[$subkey])) {
$temp[$subkey]['title'] = $value;
$temp[$subkey]['children'] = array();
}
$temp =& $temp[$subkey]['children'];
}
}
即使没有子项,它也会创建一个
children
键,但我还是发布了这篇文章。我将重新访问并编辑。谢谢-非常有用。当我看到它被写下来时,这很简单——“通过引用”传递现在完全有意义了。如果您能够删除空的子节点,那就更好了!出于兴趣,如果数组键不是'ID',而是像[0]=>array('ID'=>'orange','title'=>'orange',children=>…)这样的索引数组,那么这有多简单?我知道我们在键名上使用了isset(),因此它可能会导致在数组中搜索的复杂性。谢谢-非常有用。当我看到它被写下来时,这很简单——“通过引用”传递现在完全有意义了。如果您能够删除空的子节点,那就更好了!出于兴趣,如果数组键不是'ID',而是像[0]=>array('ID'=>'orange','title'=>'orange',children=>…)这样的索引数组,那么这有多简单?我知道我们在键名上使用了isset(),因此它可能会导致在数组中搜索的复杂性。