PHP 无限分类,从数据库查询数据 在数组中递归进行自定义排序
无限分类,从数据库查询数据 在数组中递归进行自定义排序 无限分类,从数据库查询数据 在数组中递归进行自定义排序,其中也意识到挺多不足,处理得不好,可能有更好办法,大家
无限分类,从数据库查询数据 在数组中递归进行自定义排序,其中也意识到挺多不足,处理得不好,可能有更好办法,大家一起交流 超过100行了。放不全
[PHP]代码
class Tree{
protected $arr = array(); //排序数组
protected $info = array(); //存放错误信息
protected $tree = array(); //存放生成类数组
protected $flag = true; //标志位
public function __construct()
{
}
//得到数据
public function data($fid,$arr)
{
$this->checkArr($arr);
$this->checking();
$this->chindAll($fid);
return $this->tree;
}
//判断参数是否符合要求
protected function checkArr($val)
{
static $num = 0;
if(is_array($val)){
foreach($val as $Varr){
$this->isKeyVal('id', $Varr, $num);
$this->isKeyVal('parentid', $Varr, $num);
$this->isKeyVal('name', $Varr, $num);
$num++;
}
}
$this->arr = $val;
}
//存入id是否是数组
protected function checkNum($val)
{
if(!is_numeric($val)){
$this->info[] = '传入参数'.$val.'不是数值';
$this->flag = false;
$this->checking();
}
}
//验证,输出错误信息
protected function checking(){
if(!$this->flag){
echo '<pre>';
var_dump($this->info);
exit();
}
}
//判断数组键是否存在,是否有值
protected function isKeyVal($key, $arr, $num)
{
if(!array_key_exists($key, $arr))
{
$this->info[] = $num.'数组键'.$key.'不存在';
$this->flag = false;
}
}
//获得儿子
public function getChind($fid)
{
static $num = 0;
$arr = array();
$this->checkNum($fid);
foreach($this->arr as $key=>$row){
if( $row['parentid'] == $fid){
$arr[] = $row;
unset($this->arr[$key]);
}
}
if(!empty($arr)){
$num++;
return $this->sortArr($arr);
}else{
return null;
}
}
//获取本人儿子孙子
public function chindAll($fid,$input=null)
{
static $n =0;
$n++;
$arr = $this->getChind($fid);
if(!empty($arr)){
$count = count($arr);
if(empty($input)){
for($i=0; $i<$count ;$i++){
$this->tree[$i] = $arr[$i];
}
精彩图集
精彩文章






