針對「依特定欄位對多維陣列排序」的高頻需求,提供一個極精簡、可直接複製使用的函式:
<?php
/**
* 依指定欄位排序多維陣列
* @param array &$array 目標陣列(參考傳遞)
* @param string $field 排序欄位名
* @param bool $desc 是否降序(預設 false 升序)
*/
function sortArrByField(&$array, $field, $desc = false) {
$fieldArr = array_column($array, $field); // PHP 5.5+ 更簡潔
array_multisort($fieldArr, $desc ? SORT_DESC : SORT_ASC, $array);
}
?>
<?php
$data = [
['id' => 3, 'name' => '商品C', 'price' => 150],
['id' => 1, 'name' => '商品A', 'price' => 99],
['id' => 2, 'name' => '商品B', 'price' => 200],
];
// 價格升序
sortArrByField($data, 'price');
print_r($data);
/*
Array
(
[0] => Array ( [id] => 1 [name] => 商品A [price] => 99 )
[1] => Array ( [id] => 3 [name] => 商品C [price] => 150 )
[2] => Array ( [id] => 2 [name] => 商品B [price] => 200 )
)
*/
// 價格降序
sortArrByField($data, 'price', true);
print_r($data);
?>
array_column() (PHP 5.5+):單行提取欄位值陣列,取代手動 foreacharray_multisort():第一個陣列為排序依據,後續陣列跟隨重排&$array:直接修改原陣列,無需回傳值array_column()foreach ($array as $k => $v) $fieldArr[$k] = $v[$field];這個函式已在多個專案驗證穩定,適合快速整合到工具類或 Helper 檔案中。