處理地區、分類等樹狀結構資料時,常需將扁平陣列轉換為層級縮排顯示。本文提供一個巧妙的 PHP 函數,利用鍵名排序實現無限層級分類輸出。
$array = array(
0 => array("", "河北"),
1 => array("", "北京"),
2 => array(0, "保定"),
3 => array(1, "海澱"),
4 => array(3, "中關村"),
5 => array(2, "涿州")
);
每個元素為 [父級索引, 名稱],頂層父級索引為空字串。
河北
-保定
--涿州
北京
-海澱
--中關村
function typeArray($array) {
$con = null;
foreach ($array as $k => $v) {
// 建立排序鍵:父級鍵名 + 當前鍵名 + 分隔符
$na[$k] = is_numeric($v[0]) ? $na[$v[0]] . $k . "|" : $k . "|";
}
asort($na); // 依排序鍵排序,自動形成樹狀順序
foreach ($na as $k => $v) {
$s = substr_count($v, "|"); // 統計層級數
$con .= str_repeat("-", ($s - 1)) . $array[$k][1] . "\n";
}
return $con;
}
0|2|5| 的路徑字串。asort() 會依字串順序排列,父級自然排在子級之前,同層按索引順序。| 數量即為層級深度,輸出對應數量的 -。此技巧在處理選單、導航、地區選擇器等場景非常實用,值得收藏。