控制递归次数进行向上和向下查找

功能:给定一个二维数组如: $items = array( 1 => array(‘id’ => 1, ‘pid’ => 0, ‘name’ => ‘江西省’), 2 => array(‘id’ => 2, ‘pid’ => 1, ‘name’ => ‘黑龙江省’), 3 => array(‘id’ => 3, ‘pid’ => 2, ‘name’ => ‘南昌市’), 4 => array(‘id’ => 4, ‘pid’ => 3, ‘name’ => ‘曲靖市’), 6 => array(‘id’ => 6, ‘pid’ => 1, ‘name’ => ‘曲靖市2’), 7 => array(‘id’ => 10, ‘pid’ => 3, ‘name’ => ‘曲靖市2’), ); 给定数组的id值,递归次数count,找出它的对应父类和子类,代码实现如下:

//向下查找 function select_down($data, $id,$count){ static $ret = array(); static $num=0; $num++; if($num>$count){ return $ret; } $pid=''; foreach ($data as $one_data){ if($one_data['id']==$id){ $pid=$one_data['id']; } } if(!empty($pid)){ foreach ($data as $k => $v) { if($v['pid'] == $pid) { $ret[] = $v; select_down($data, $v['id'],$count); } } } return $ret; } //向上查找 function select_up($data, $id,$count){ static $ret = array(); static $num=0; $num++; if($num>$count){ return $ret; } $fater_id=''; foreach ($data as $one_data){ if($one_data['id']==$id){ $fater_id=$one_data['pid']; } } if(!empty($fater_id)){ foreach ($data as $k => $v) { if($v['id'] == $fater_id) { $ret[] = $v; select_up($data, $v['id'],$count); } } } return $ret; }