PHP不用遞歸實現無限分類數據的樹形格式化 5行9行代碼修改

參考
1. http://www.oschina.net/code/snippet_98719_11296
2. http://www.oschina.net/code/snippet_173183_11767 php

[1] 語句 $tree[] = &$items[$item['id']]; 這裏把不存在的鍵值、內容加上了,以下例中的鍵值4,可是沒法判斷其父類,會將其判斷爲根id,去掉不要;
[2] 考慮到字段名稱問題,使用[1]的參數模式,添加分類id和父類pid設置,同時處理一下取得的數據;.net

實例以下,從表中取得全部分類數據保存到$rows,已考慮添加順序和刪除記錄問題code

<?php
/*
 * php無限分類數據樹形格式化
 *
 * 此方法由 mantye 提供  
 * http://my.oschina.net/u/223350 
 * @date 2013-07-22
**/
function genTree($rows, $id='id', $pid='pid') {
	$items = array();
	foreach ($rows as $row) $items[$row[$id]] = $row;
	foreach ($items as $item) $items[$item[$pid]]['son'][$item[$id]] = &$items[$item[$id]];
	return isset($items[0]['son']) ? $items[0]['son'] : array(); 
}

$rows = array(
	array('id' => 111, 'pid' => 0, 'name' => '江西省'),
	array('id' => 5, 'pid' => 2, 'name' => '雞西市'),
	array('id' => 2, 'pid' => 0, 'name' => '黑龍江省'),
	array('id' => 3, 'pid' => 111, 'name' => '南昌市'),
	//array('id' => 4, 'pid' => 2, 'name' => '哈爾濱市'),
	array('id' => 6, 'pid' => 4, 'name' => '香坊區'),
	array('id' => 27, 'pid' => 4, 'name' => '南崗區'),
	array('id' => 8, 'pid' => 6, 'name' => '和興路'),
	array('id' => 9, 'pid' => 27, 'name' => '西大直街'),
	array('id' => 10, 'pid' => 8, 'name' => '東北林業大學'),
	array('id' => 11, 'pid' => 9, 'name' => '哈爾濱工業大學'),
	array('id' => 12, 'pid' => 8, 'name' => '哈爾濱師範大學'),
	array('id' => 13, 'pid' => 111, 'name' => '贛州市'),
	array('id' => 14, 'pid' => 13, 'name' => '贛縣'),
	array('id' => 15, 'pid' => 13, 'name' => '於都縣'),
	array('id' => 16, 'pid' => 14, 'name' => '茅店鎮'),
	array('id' => 17, 'pid' => 14, 'name' => '大田鄉'),
	array('id' => 18, 'pid' => 16, 'name' => '義源村'),
	array('id' => 19, 'pid' => 16, 'name' => '上壩村')
);

echo '<pre>';
$rows = genTree($rows);
print_r($rows);

?>
相關文章
相關標籤/搜索