首页 > 计算机技术 > 后端开发 > PHP

PHP遍历无限分级的二维数组,获取指定节点的全部父节点和全部子节点

原创 lihf8515 2025年02月08日 16:28
来源:本站 阅读:466

在PHP语言开发web应用系统时,我们经常要用到遍历具有多级分类结构的二维数组,然后获取指定节点的父节点或子节点,或者其逗号分隔的字符串形式。

由于这个多级分类的数据量都不是很大,因此,我们可以使用递归算法来实现。下面代码主要实现以下功能:

1、遍历二维数组,返回指定节点的全部父节点组成的二维数组,包括当前查找的节点。

2、遍历二维数组,返回指定节点的全部父节点组成的二维数组,不包括当前查找的节点。

3、遍历二维数组,返回指定节点的全部子节点组成的二维数组,不包括当前查找的节点。

4、遍历上述3个方法获取的二维数组,返回指定字段用逗号分隔字符串形式。

比如:下面这样的二维数组

$array = array(
array('id' => 1, 'pid' => '0', 'title' => '系统设置'),
array('id' => 2, 'pid' => '0', 'title' => '日常业务'),
array('id' => 3, 'pid' => '2', 'title' => '库存'),
array('id' => 4, 'pid' => '3', 'title' => '批发'),
);

/**
 * 遍历二维数组,返回指定节点的全部父节点组成的二维数组,包括当前查找的节点
 * @param $array
 * @param $id
 * @return @string
 */ 
function getParentsWithSelf($array, $id) {
    $parents = [];
    foreach ($array as $node) {
        if ($node['id'] == $id) {
            $parents[] = $node; // 将当前节点添加到结果中
            if ($node['pid'] !== '0') { // 如果当前节点有父节点,递归查找父节点
                $additionalParents = getParentsWithSelf($array, $node['pid']);
                $parents = array_merge($additionalParents, $parents); // 将找到的父节点添加到结果中
            }
            break; // 找到当前节点后,跳出循环
        }
    }
    return $parents;
}

/**
 * 遍历树二维数组,返回指定节点的全部父节点组成的二维数组
 * @param $array
 * @param $id
 * @return @string
 */
function getParents($array, $targetId=0){
    $result = getParentsWithSelf($array, $targetId);
    array_pop($result);
    return $result;
}

/**
 * 遍历二维数组,返回指定节点的全部子节点组成的二维数组
 * @param $array
 * @param $id
 * @return @string
 */ 
function getSubs($array, $id=0) {
    $children = []; 
    foreach ($array as $item) {
        if ($item['pid'] == $id) {
            $children[] = $item;
            $additionalSubs = getSubs($array, $item['id']);
            $children = array_merge($children, $additionalSubs); // 将找到的子节点添加到结果中
        }
    }    
    return $children;
}

/**
 * 遍历二维数组,返回指定字段用逗号分隔字符串形式
 * @param $array
 * @param $field
 * @return @string
 */
function getCommaString($array, $field='id'){
    $str = "";
    foreach($array as $value){
        $str .= $value[$field].',';
    }
    return substr($str, 0, strlen($str) -1);
}
作者
昵称:君子如兰
注册时间:2025-01-31 02:47:34
最近更新:2026-01-24 17:01:06
文章总数:94篇
原创 88篇   转载 6篇
友情链接: 海峰收银系统  
Copyright © 2025 hfsoft.top All Rights Reserved.
中华人民共和国工业和信息化部ICP备案序号:皖ICP备2025073039号