PHP無制限極分類実現
3170 ワード
簡易版のPHPは無制限極分類コードを生成する.データベース設計、および出力分類HTMLコードが含まれています.
SQLコード
PHPコード
テスト
転載先:https://www.cnblogs.com/duanbiaowu/p/5086548.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