PHP無制限極分類実現

3170 ワード

簡易版のPHPは無制限極分類コードを生成する.データベース設計、および出力分類HTMLコードが含まれています.
SQLコード
CREATE TABLE `district` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `pid` int(10) unsigned NOT NULL,
    `name` varchar(32) NOT NULL DEFAULT '',
    PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

#         
 INSERT INTO `district` (`id`, `pid`, `name`) VALUES
 (1, 0, '  '),
 (2, 0, '  '),
 (3, 0, '  '),
 (4, 1, '  '),
 (5, 1, '  '),
 (6, 1, '  '),
 (7, 2, '   '),
 (8, 2, '  '),
 (9, 3, '  '),
 (10, 3, '  '),
 (11, 4, '   ');

PHPコード
header('Content-type:text/html;charset=utf-8');

$mysql = new mysqli('localhost', 'root', 'root', 'test');
$mysql->query('SET NAMES UTF8');
$result = $mysql->query('SELECT * FROM `district`');

while ($row = $result->fetch_assoc()) {
    $district[$row['id']] = array('id' => $row['id'], 'pid' => $row['pid'], 'name' => $row['name']);
}

// $district      :
$items = array(
    1 => array('id' => 1, 'pid' => 0, 'name' => '  '),
    2 => array('id' => 2, 'pid' => 0, 'name' => '  '),
    3 => array('id' => 3, 'pid' => 0, 'name' => '  '),
    4 => array('id' => 1, 'pid' => 1, 'name' => '  '),
    // .......
    // .......
    11 => array('id' => 11, 'pid' => '4', 'name' => '   ')
);


/**
 * @   :              
 * @param array $items         
 * return array $items        
 */
function arrayToTree(Array $items) {
    foreach ($items as $item) {
        $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];
    }
    return isset($items[0]['son']) ? $items[0]['son'] : array();
}

/**
 * @   :              
 * @param array $items         
 * return array $items        
 */
function arrayToTree2(Array $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;
}

/**
 *          
 * @param array $items       
 * @param number $deep      id
 */
function exportTree($items, $deep = 0){
    foreach ($items as $item) {
        printf("%s%s", str_repeat('——', $deep), $item['name']);
        if (!empty($item['son'])) {
            exportTree($item['son'], $deep + 1);
        }
    }
}

テスト
//             
$district = arrayToTree2($district);
//        
exportTree($district);

//    :

   
 ——  
 ————   
 ——  
 ——  
   
 ——   
 ——  
   
 ——  
 ——  

転載先:https://www.cnblogs.com/duanbiaowu/p/5086548.html