ArraySortUtil 是一個輕量級的 PHP 多維數組排序工具類,支援 uasort(保持鍵值關聯)與 multisort(多鍵排序)兩種引擎,可按多欄位、多順序、大小寫敏感度、自然排序等靈活組合。
ArraySortUtil::uasort($array, $fields):基於 uasort,保留原鍵名。ArraySortUtil::multisort($array, $fields):基於 array_multisort,重新索引。每個排序欄位為一個關聯數組,支援以下鍵:
| 鍵名 | 說明 | 預設值 |
|---|---|---|
| field | 必填,要排序的欄位名 | — |
| order | true=降序,false=升序 | false |
| nature | true=自然排序,false=普通排序 | false |
| caseSensitive | true=區分大小寫,false=不區分 | false |
<?php
require_once 'class.ArraySortUtil.php';
$assetData = [
["id"=>1, "category"=>"Hardware", "subcategory"=>"Personal Computer", "supplier"=>"DELL", "particular"=>"Vostro 1320", "purchase_price"=>2300, "other_charges"=>500],
["id"=>2, "category"=>"Hardware", "subcategory"=>"Personal Computer", "supplier"=>"DELL", "particular"=>"Vostro 1420", "purchase_price"=>2500, "other_charges"=>0],
["id"=>3, "category"=>"Hardware", "subcategory"=>"Laptop", "supplier"=>"DELL", "particular"=>"Vostro 1520", "purchase_price"=>4500, "other_charges"=>100],
["id"=>4, "category"=>"Hardware", "subcategory"=>"Laptop", "supplier"=>"Acer", "particular"=>"Apire One", "purchase_price"=>2500, "other_charges"=>200],
["id"=>5, "category"=>"Furniture", "subcategory"=>"Table", "supplier"=>"CHEN", "particular"=>"Manager Table", "purchase_price"=>1000, "other_charges"=>0],
["id"=>6, "category"=>"Furniture", "subcategory"=>"Table", "supplier"=>"CHEN", "particular"=>"Staff Table", "purchase_price"=>500, "other_charges"=>0],
["id"=>7, "category"=>"Furniture", "subcategory"=>"Chair", "supplier"=>"CHEN", "particular"=>"Staff Chair", "purchase_price"=>500, "other_charges"=>0],
];
// 多欄位排序:category 升序,subcategory 降序
$fields = [
["field" => "category"],
["field" => "subcategory", "order" => true]
];
$sorted = ArraySortUtil::multisort($assetData, $fields);
echo "<h1>multisort 結果</h1><pre>";
print_r($sorted);
echo "</pre>";
$sorted = ArraySortUtil::uasort($assetData, $fields);
echo "<h1>uasort 結果(保留鍵)</h1><pre>";
print_r($sorted);
echo "</pre>";
?>
這個類封裝了底層排序細節,讓業務代碼只需聲明「按什麼欄位、怎麼排」,極大提升可讀性與維護性。