欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

递归获取二维数组后代、删除后代

程序员文章站 2022-06-01 10:12:46
...

递归获取二维数组后代、删除后代。 #数据少的时候还好用 #不晓得非递归代码怎么写,在这里求非递归写法 /** * 获取后代 * @param array $arr 需要操作的二维数组 * @param int $id 需要获取的编号 * @param string $idkey 唯一编号字段 * @param string $pid

递归获取二维数组后代、删除后代。
#数据少的时候还好用
#不晓得非递归代码怎么写,在这里求非递归写法

/**
 * 获取后代
 * @param array $arr 需要操作的二维数组
 * @param int $id 需要获取的编号
 * @param string $idkey 唯一编号字段
 * @param string $pidkey 父编号字段
 * @param int $self 是否包含自身
 * @return array
 */


function getChilds($arr,$id,$idkey,$pidkey,$self = 0){
	$c = array();
	foreach ($arr as $k => $value){
		if($self && $value[$idkey] == $id){
			$c[] = $value;
			$self = 0;
		}
		if($value[$pidkey] == $id){
			$c[] = $value;
			$c = array_merge($c,getChilds($arr,$value[$idkey],$idkey,$pidkey,0));
		}

	}
	return $c;
}

/**
 * 移除后代
 * @param array $arr 需要操作的二维数组
 * @param int $id 需要移除的编号
 * @param string $idkey 唯一编号字段
 * @param string $pidkey 父编号字段
 * @param int $self 是否移除自身
 * @param int $array_values 是否重新索引数组
 * @return array
 */
function removeChilds($arr,$id,$idkey,$pidkey,$self = 0,$array_values = 0){
	$c = getChilds($arr, $id, $idkey, $pidkey,$self);
	foreach ($c as $o){
		foreach ($arr as $k => $v){
			if($o[$idkey] == $v[$idkey]){
				unset($arr[$k]);
				break;
			}
		}
	}
	return $array_values ? array_values($arr) : $arr;
}