首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 實現地區分類無限層級排序演算法

     編輯:PHP 相關知識

處理地區、分類等樹狀結構資料時,常需將扁平陣列轉換為層級縮排顯示。本文提供一個巧妙的 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;
}

原理解析

  1. 構建排序鍵:遞迴將父級的排序鍵串接到子級前,形成如 0|2|5| 的路徑字串。
  2. 字母排序:asort() 會依字串順序排列,父級自然排在子級之前,同層按索引順序。
  3. 層級縮排:統計分隔符 | 數量即為層級深度,輸出對應數量的 -。

優缺點

  • ✅ 代碼極簡,無需遞迴函數、無需建立樹狀物件。
  • ✅ 適用於任意深度分類。
  • ⚠️ 依賴陣列索引為數字且父級索引指向正確位置;若資料來自資料庫,需先按 ID 排序或重新索引。

此技巧在處理選單、導航、地區選擇器等場景非常實用,值得收藏。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved