递归获取二维数组后代、删除后代
程序员文章站
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; }