比如无限级菜单,通过递归后是一个多维数组,我想把这个多维数组转换为二维数组并重新排序后进行foreach,请问这个function该如何写?
回复讨论(解决方案) 建议举例说明,这样清晰明了。
$a = array( 0=>array( 'categoryid'=>1, 'name'=>aa1, 'parent'=>0, 'childs'=>array( 0=>array( 'categoryid'=>2, 'name'=>bb1, 'parent'=>1, 'childs'=>array( 0=>array( 'categoryid'=>3, 'name'=>cc, 'parent'=>2, 'childs'=>array( 0=>array( 'categoryid'=>4, 'name'=>dd1, 'parent'=>3, ), 1=>array( 'categoryid'=>5, 'name'=>dd2, 'parent'=>3, ), ), ), ), ), 1=>array( 'categoryid'=>6, 'name'=>bb2, 'parent'=>1, ), ), ), 1=>array( 'categoryid'=>7, 'name'=>aa2, 'parent'=>0, ));function imp($tree, $children='childs') { $imparr = array(); foreach($tree as $w) { if(isset($w[$children])) { $t = $w[$children]; unset($w[$children]); $imparr[] = $w; if(is_array($t)) $imparr = array_merge($imparr, imp($t, $children)); } else { $imparr[] = $w; } } return $imparr;}print_r(imp($a));
array( [0] => array ( [categoryid] => 1 [name] => aa1 [parent] => 0 ) [1] => array ( [categoryid] => 2 [name] => bb1 [parent] => 1 ) [2] => array ( [categoryid] => 3 [name] => cc [parent] => 2 ) [3] => array ( [categoryid] => 4 [name] => dd1 [parent] => 3 ) [4] => array ( [categoryid] => 5 [name] => dd2 [parent] => 3 ) [5] => array ( [categoryid] => 6 [name] => bb2 [parent] => 1 ) [6] => array ( [categoryid] => 7 [name] => aa2 [parent] => 0 ))
重新组装一次就可以。
进行数组的重新拼接。
function imp($tree, $children='childs') { $imparr = array(); foreach($tree as $w) { if(isset($w[$children])) { $t = $w[$children]; unset($w[$children]); $imparr[] = $w; if(is_array($t)) $imparr = array_merge($imparr, imp($t, $children)); } else { $imparr[] = $w; } } return $imparr;}print_r(imp($a));
array(
请问大哥如果数组中没有childs标识怎么办?
递归已经把我递乱了~~
我的数组:
array(2) { [0childs] => array(9) { [cate_id] => string(1) 5 [cate_title] => string(12) 古剑奇谭 [cate_pid] => string(1) 0 [cate_type] => string(7) article [cate_type2] => null [cate_sort] => string(1) 1 [0childs] => array(6) { [cate_id] => string(1) 7 [cate_title] => string(12) 百里屠苏 [cate_pid] => string(1) 5 [cate_type] => string(7) article [cate_type2] => null [cate_sort] => string(1) 2 } [1childs] => array(6) { [cate_id] => string(1) 8 [cate_title] => string(6) 晴雪 [cate_pid] => string(1) 5 [cate_type] => string(7) article [cate_type2] => null [cate_sort] => string(1) 5 } [2childs] => array(6) { [cate_id] => string(1) 9 [cate_title] => string(6) 少恭 [cate_pid] => string(1) 5 [cate_type] => string(7) article [cate_type2] => null [cate_sort] => string(1) 6 } } [1childs] => array(9) { [cate_id] => string(2) 10 [cate_title] => string(12) 天龙八部 [cate_pid] => string(1) 0 [cate_type] => string(7) article [cate_type2] => null [cate_sort] => string(1) 2 [0childs] => array(6) { [cate_id] => string(2) 11 [cate_title] => string(6) 萧峰 [cate_pid] => string(2) 10 [cate_type] => string(7) article [cate_type2] => null [cate_sort] => string(1) 2 } [1childs] => array(6) { [cate_id] => string(2) 12 [cate_title] => string(6) 虚竹 [cate_pid] => string(2) 10 [cate_type] => string(7) article [cate_type2] => null [cate_sort] => string(1) 3 } [2childs] => array(6) { [cate_id] => string(2) 13 [cate_title] => string(9) 慕容复 [cate_pid] => string(2) 10 [cate_type] => string(7) article [cate_type2] => null [cate_sort] => string(1) 4 } }}
我擦,楼上的写错了~~还不能删除。。。
下面这个是我现在的。
array(2) { [0] => array(9) { [cate_id] => string(1) 5 [cate_title] => string(12) 古剑奇谭 [cate_pid] => string(1) 0 [cate_type] => string(7) article [cate_type2] => null [cate_sort] => string(1) 1 [0] => array(6) { [cate_id] => string(1) 7 [cate_title] => string(12) 百里屠苏 [cate_pid] => string(1) 5 [cate_type] => string(7) article [cate_type2] => null [cate_sort] => string(1) 2 } [1] => array(6) { [cate_id] => string(1) 8 [cate_title] => string(6) 晴雪 [cate_pid] => string(1) 5 [cate_type] => string(7) article [cate_type2] => null [cate_sort] => string(1) 5 } [2] => array(6) { [cate_id] => string(1) 9 [cate_title] => string(6) 少恭 [cate_pid] => string(1) 5 [cate_type] => string(7) article [cate_type2] => null [cate_sort] => string(1) 6 } } [1] => array(9) { [cate_id] => string(2) 10 [cate_title] => string(12) 天龙八部 [cate_pid] => string(1) 0 [cate_type] => string(7) article [cate_type2] => null [cate_sort] => string(1) 2 [0] => array(6) { [cate_id] => string(2) 11 [cate_title] => string(6) 萧峰 [cate_pid] => string(2) 10 [cate_type] => string(7) article [cate_type2] => null [cate_sort] => string(1) 2 } [1] => array(6) { [cate_id] => string(2) 12 [cate_title] => string(6) 虚竹 [cate_pid] => string(2) 10 [cate_type] => string(7) article [cate_type2] => null [cate_sort] => string(1) 3 } [2] => array(6) { [cate_id] => string(2) 13 [cate_title] => string(9) 慕容复 [cate_pid] => string(2) 10 [cate_type] => string(7) article [cate_type2] => null [cate_sort] => string(1) 4 } }}
不一样是遍历吗?只是麻烦点,发现是数组就递归进入
如果想要具体代码,就请贴出 var_export 的结果
我只看看就可以了。
getvalue($v);
}else{
$this->b[]=$v;
}
}
return $this->b;
}
}
$c=new getonear();
$b=$c->getvalue($a);
var_dump($b);
?>