首页
> 计算机技术
> 后端开发
> PHP
PHP遍历无限分级的二维数组,获取指定节点的全部父节点和全部子节点
原创 lihf8515于2025年02月08日 16:28发表
来源:本站 阅读:105
在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);
}
阅读排行榜