1. 程式人生 > >無限極分類不是用遞迴 兩個函式解決 新增和迴圈【附上程式碼】

無限極分類不是用遞迴 兩個函式解決 新增和迴圈【附上程式碼】

實現無限極分類

首先先看一下資料結構

//資料結構
// $items = array(
//     1 => array('id' => 1, 'pid' => 0, 'name' => 'anhui'),
//     2 => array('id' => 2, 'pid' => 0, 'name' => 'zhejiang'),
//     3 => array('id' => 3, 'pid' => 1, 'name' => 'hefei'),
//     4 => array('id' => 4, 'pid' => 3, 'name' => 'zhangfeng'),
//     5 => array('id' => 5, 'pid' => 1, 'name' => 'anqing'),
//     6 => array('id' => 6, 'pid' => 0, 'name' => 'sichuan'),
//     7 => array('id' => 7, 'pid' => 0, 'name' => 'dayang'),
//     8 => array('id' => 8, 'pid' => 3, 'name' => 'guangdong'),
// );

以上的是資料結構 items表一共有三個欄位 id自增  pid為0代表最頂級分類 name分類名稱

//顯示樹結構
function generateTree($items){
    $tree = array();
    foreach($items as $item){
        if(isset($items[$item['pid']])){
            $items[$item['pid']]['son'][] = &$items[$item['id']];
        }else{
            $tree[] = &$items[$item['id']];
        }
    }
    return $tree;
}

//新增子分類
function addtree(&$arr,$pid,$name){
    $num=count($arr)+1;
    if($num==0){$num=0;}
    $arr[$num]=array(
        'id'=>$num,
        'pid'=>$pid,
        'name'=>$name
    );
}
兩個方法 addtree用來新增 genrateTree用來排序返回一個數組

以下附上完整程式碼

<?php

//無限極分類

//顯示樹結構
function generateTree($items){
    $tree = array();
    foreach($items as $item){
        if(isset($items[$item['pid']])){
            $items[$item['pid']]['son'][] = &$items[$item['id']];
        }else{
            $tree[] = &$items[$item['id']];
        }
    }
    return $tree;
}

//新增子分類
function addtree(&$arr,$pid,$name){
    $num=count($arr)+1;
    if($num==0){$num=0;}
    $arr[$num]=array(
        'id'=>$num,
        'pid'=>$pid,
        'name'=>$name
    );
}


$items=array();
//資料結構
// $items = array(
//     1 => array('id' => 1, 'pid' => 0, 'name' => 'anhui'),
//     2 => array('id' => 2, 'pid' => 0, 'name' => 'zhejiang'),
//     3 => array('id' => 3, 'pid' => 1, 'name' => 'hefei'),
//     4 => array('id' => 4, 'pid' => 3, 'name' => 'zhangfeng'),
//     5 => array('id' => 5, 'pid' => 1, 'name' => 'anqing'),
//     6 => array('id' => 6, 'pid' => 0, 'name' => 'sichuan'),
//     7 => array('id' => 7, 'pid' => 0, 'name' => 'dayang'),
//     8 => array('id' => 8, 'pid' => 3, 'name' => 'guangdong'),
// );

addtree($items,'0','成都');
addtree($items,'1','自貢');
addtree($items,'2','富順');
addtree($items,'0','上海');
addtree($items,'4','外灘');
addtree($items,'3','市中花園');
addtree($items,'3','福州花園');
// showtree($items);
print_r(generateTree($items));


?>