去掉没有父级的子数据,并以右边的方式输出 | |
数组: | 输出结果: |
无限父级代码
function grade($arr, $pid = 0)
{
$pgrade = array();//定义一个空数组
foreach ($arr as $item) {//遍历输出数组内容
if ($item['pid'] == $pid) {//父id与内容ID相同
$item['children'] = grade($arr, $item['id']);//继续调用本身
if (empty($item['children'])) {//如果子内容为空,
unset($item['children']);//销毁指定的变量
}
$pgrade[] = $item;//否则输出$item内容
}
}
return $pgrade;//循环结束,返回数组内容
}
把子节点内容抽出
改变输出方式,以右边的方式输出 | |
数组类型: | 输出结果: |
代码:
function formatTree($tree){
$options = [];
if (!empty($tree)){
foreach ($tree as $key => $value) {
$options[] = $value;
unset($options[$key]['children']);
if (isset($value['children'])) {//查询是否有子节点
$optionsTmp = formatTree($value['children']);
if (!empty($optionsTmp)) {
$options = array_merge($options, $optionsTmp);
}
}
}
}
return $options;
}
去掉没有父级的子数据 | |
数组类型: | 输出结果: |
代码:
function grade1($array, $pid = 0)
{
//声明静态数组,避免递归调用时,多次声明导致数组覆盖
static $list = [];
foreach ($array as $key => $value){
//第一次遍历,找到父节点为根节点的节点 也就是pid=0的节点
if ($value['pid'] == $pid){
//把数组放到list中
$list[] = $value;
//把这个节点从数组中移除,减少后续递归消耗
unset($array[$key]);
//开始递归,查找父ID为该节点ID的节点
grade1($array, $value['id']);
}
}
return $list;
}