今天在处理菜单的上下级关系时遇到一个问题:
laravel用get方法查询出的结果通过类似parentid这种字段进行上下级处理后,需要unset掉子级的数据,但这样就会导致整个结果索引错乱,代码如下:
public function anyTest(){
$list = DB::table('xxx')->get();
foreach($list as $key=>$item){
if($item->parentid == 0){
$index = 0;
foreach($list as $k=>$t){
if($t->parentid == $item->id){
$index++;
$item->childs[$index] = $t;
unset($list[$k])
}
}
}
}
return $list;
}
这种情况下会导致
"list": {
"0": {
id:x,
...
},
'4':{
id:x,
...
},
'8':{
id:x,
...
}
解决方法时在对结果处理结束后使用
$list = $list->values();
public function anyTest(){
$list = DB::table('xxx')->get();
foreach($list as $key=>$item){
if($item->parentid == 0){
$index = 0;
foreach($list as $k=>$t){
if($t->parentid == $item->id){
$index++;
$item->childs[$index] = $t;
unset($list[$k])
}
}
}
}
$list = $list->values();
return $list;
}