如何在PHP中递归地重新映射数组?
如何递归地将子节点重新映射到节点?我尝试编写递归函数,但它只运行一次迭代。数组映射-仅对单个维度运行 我使用嵌套集模型输入是通过转储所有层次结构生成的如何在PHP中递归地重新映射数组?,php,recursion,Php,Recursion,如何递归地将子节点重新映射到节点?我尝试编写递归函数,但它只运行一次迭代。数组映射-仅对单个维度运行 我使用嵌套集模型输入是通过转储所有层次结构生成的 $array = Category::where('name', '=', 'All')->first()->getDescendantsAndSelf()->toHierarchy()->toArray(); /* Input */ $array = array( 'category_id' => 0, 'chi
$array = Category::where('name', '=', 'All')->first()->getDescendantsAndSelf()->toHierarchy()->toArray();
/* Input */
$array = array(
'category_id' => 0,
'children' => array(
array(
'category_id' => 1,
'children' => array(
'category_id' => 2,
'children' => array(
'category_id' => 3,
)
)
),
array(
'category_id' => 4,
'children' => array(
'category_id' => 5,
'children' => array(
'category_id' => 6,
)
)
)
)
);
输出应该是
/*
$array = array(
'category_id' => 0,
'nodes' => array(
array(
'category_id' => 1,
'nodes' => array(
'category_id' => 2,
'nodes' => array(
'category_id' => 3,
)
)
),
array(
'category_id' => 4,
'nodes' => array(
'category_id' => 5,
'nodes' => array(
'category_id' => 6,
)
)
)
)
);*/
function remap($items){
if(!empty($items['children'])){
$items['nodes'] = $items['children'];
unset($items['children']);
return remap($items['nodes']);
}
else{
return $items;
}
}
print_r(remap($array));
有点复杂的原因,
childrens
内容因深度而异
function remap(array &$items){
if(array_key_exists('children',$items)){
$items['nodes'] = $items['children'];
unset($items['children']);
if(array_key_exists('children',$items['nodes'])){
$items['nodes']['nodes'] = $items['nodes']['children'];
unset($items['nodes']['children']);
}
foreach ($items['nodes'] as &$x) {
if (is_array($x)) {
remap($x);
}
}
}
else{
return $items;
}
}
remap($array);
print_r($array);
此功能将
子项
键更改为节点
function remap($items) {
$result = array();
foreach ($items as $key => $value) {
if ($key == 'children') {
$result['nodes'] = remap($value);
} else {
$result[$key] = $value;
}
}
return $result;
}
$new_array = remap($array);
但是在你的评论之后,在您的Eloquent模型中创建一个将
子对象映射到节点的访问器,并在获取集合的select中使用该访问器似乎更容易。为什么将子对象
键更改为节点
?我必须重新映射Eloquent集合,以便为treeview插件输出json。插件要求数据采用指定格式谢谢,这个解决方案很有效。也许你知道一个特定于嵌套集的解决方案?对不起,我不明白你问的是什么,也许有一种方法可以扩展Baum\Node以获得相同的结果,我看到了,但是代码太多了,我的时间太少了