【发布时间】:2016-02-21 23:28:37
【问题描述】:
我希望使用递归函数将一个多维数组转换为另一个多维数组。
源数组:
Array
(
[1] => Array
(
[id] => 1
[source_name] => kk56ca1d0f2378f
[company_id] => 1
[lft] => 1
[rgt] => 18
[parent_id] => 0
[children] => Array
(
[2] => Array
(
[id] => 2
[source_name] => kk56ca1d17f3f63
[company_id] => 1
[lft] => 2
[rgt] => 3
[parent_id] => 1
[children] => Array
(
)
)
[3] => Array
(
[id] => 3
[source_name] => kk56ca1d1ebe975
[company_id] => 1
[lft] => 4
[rgt] => 13
[parent_id] => 1
[children] => Array
(
[6] => Array
(
[id] => 6
[source_name] => kk56ca1fc882ac0
[company_id] => 1
[lft] => 5
[rgt] => 10
[parent_id] => 3
[children] => Array
(
)
)
)
)
)
)
)
我需要进入格式
Array
(
[0] => Array
(
[id] => 1
[text] => kk56ca1d0f2378f
[parent_id] => 0
[nodes] => Array
(
[0] => Array
(
[id] => 2
[text] => kk56ca1d17f3f63
[parent_id] => 1
[nodes] => Array
(
)
)
[1] => Array
(
[id] => 3
[text] => kk56ca1d1ebe975
[parent_id] => 1
[nodes] => Array
(
[0] => Array
(
[id] => 6
[text] => kk56ca1fc882ac0
[parent_id] => 3
[nodes] => Array
(
)
)
[1] => Array
(
[id] => 15
[text] => kk
[parent_id] => 3
[nodes] => Array
(
)
)
)
)
)
)
)
我已经尝试了几个小时,但没有任何结果。任何帮助将不胜感激。
源数组具有关联索引(尽管它们是数字),目标数组具有数字索引。除此之外,只需要删除一些索引并更改一些名称即可。
编辑:
具体改动:
- 将索引名称 source_name 更改为文本
- 将索引名称子节点更改为节点
- 未设置索引 lft、rgt、company_id
我对递归没有太多经验,所以我尝试过没有结果。
这是我能想到的:
// pass array of nodes
function convert_array($from){
// this is a node
if(isset($from['source_name']))
{
$temp = array();
$temp['id'] = $from['id'];
convert_array($from['children']);
}
// this is an array of nodes
else
{
foreach($from as $arr)
{
$ret = convert_array($arr);
print_r($ret);
}
}
}
但我无法理解要返回的数据以及新数组是如何从返回值构建的。
【问题讨论】:
-
你能解释一下你想在第一个数组中改变什么吗?还是只想重新编号数组顶层的索引?
-
你能减少你的例子吗,很难看到,你想要实现的,两个数组在很多方面都有很大的不同......
-
阵列不是火箭科学。正如我上面的两个 cmets 已经说过的:弄清楚你到底想要做什么。然后就去做吧 ;)
foreach()非常适合 PHP 中的数组。如果您有未知的维度,请查找递归。那么应该就是几行简单的代码 -
我已经修改了我的帖子。
标签: php recursion multidimensional-array