php 无限级分类

<?php

$array = array(
array('id' => 1, 'pid' => 0, 'name' => '河北省'),
array('id' => 2, 'pid' => 0, 'name' => '北京市'),
array('id' => 3, 'pid' => 1, 'name' => '邯郸市'),
array('id' => 4, 'pid' => 2, 'name' => '朝阳区'),
array('id' => 5, 'pid' => 2, 'name' => '通州区'),
array('id' => 6, 'pid' => 4, 'name' => '望京'),
array('id' => 7, 'pid' => 4, 'name' => '酒仙桥'),
array('id' => 8, 'pid' => 3, 'name' => '永年区'),
array('id' => 11, 'pid' => 1, 'name' => '武安市'),
);

function generateTree($array){
    // 构造数据
    $items = array();
    foreach($array as $value){
        $items[$value['id']] = $value;
    }
    // 遍历数据
    $tree = array();
    foreach($items as $key => $item){
        if(isset($items[$item['pid']])){
            $items[$item['pid']]['son'][] = &$items[$key];
        }else{
            $tree[] = &$items[$key];	
        }
    }
    return $tree;
}

$list = generateTree($array);
var_dump($list);

// 结果
array(2) {
  [0]=>
  array(4) {
    ["id"]=>
    int(1)
    ["pid"]=>
    int(0)
    ["name"]=>
    string(9) "河北省"
    ["son"]=>
    array(2) {
      [0]=>
      array(4) {
        ["id"]=>
        int(3)
        ["pid"]=>
        int(1)
        ["name"]=>
        string(9) "邯郸市"
        ["son"]=>
        array(1) {
          [0]=>
          array(3) {
            ["id"]=>
            int(8)
            ["pid"]=>
            int(3)
            ["name"]=>
            string(9) "永年区"
          }
        }
      }
      [1]=>
      array(3) {
        ["id"]=>
        int(11)
        ["pid"]=>
        int(1)
        ["name"]=>
        string(9) "武安市"
      }
    }
  }
  [1]=>
  array(4) {
    ["id"]=>
    int(2)
    ["pid"]=>
    int(0)
    ["name"]=>
    string(9) "北京市"
    ["son"]=>
    array(2) {
      [0]=>
      array(4) {
        ["id"]=>
        int(4)
        ["pid"]=>
        int(2)
        ["name"]=>
        string(9) "朝阳区"
        ["son"]=>
        array(2) {
          [0]=>
          array(3) {
            ["id"]=>
            int(6)
            ["pid"]=>
            int(4)
            ["name"]=>
            string(6) "望京"
          }
          [1]=>
          array(3) {
            ["id"]=>
            int(7)
            ["pid"]=>
            int(4)
            ["name"]=>
            string(9) "酒仙桥"
          }
        }
      }
      [1]=>
      array(3) {
        ["id"]=>
        int(5)
        ["pid"]=>
        int(2)
        ["name"]=>
        string(9) "通州区"
      }
    }
  }
}

猜你喜欢

转载自my.oschina.net/xiaoerit/blog/1816574
今日推荐