由於陣列中包含數字
,特殊字元
,中文
等,所以自然排序就無法使用。這裡用自定義辦法
// 陣列
$arr1 = ['1000-2000元', '1000元以下', '8000元以上', '5001-8000元', '2001-3000元', '3001-5000元'];
$arr2 = ['3小時以上', '1小時以內', '1-3小時'];
// 排序方法
function array_asort(&$array) {
if (!isset($array) || !is_array($array)) {
return false;
}
$real_arr = [
'1000元以下' => '0-999元',
'1小時以內' => '0-1小時',
];
foreach ($array as $k => $v) {
if (in_array($v, array_keys($real_arr))) {
$array[$k] = $real_arr[$v];
} else {
$array[$k] = $v;
}
}
asort($array);
foreach ($array as $k => $v) {
if (in_array($v, array_values($real_arr))) {
$newArr = array_flip($real_arr); // 陣列鍵值翻轉
$array[$k] = $newArr[$v];
} else {
$array[$k] = $v;
}
}
return true;
}
// 方法
array_asort($arr1);
array_asort($arr2);
echo '<pre>';
var_dump($arr1);
var_dump($arr2);
// 結果
array(6) {
[1]=>
string(13) "1000元以下"
[0]=>
string(12) "1000-2000元"
[4]=>
string(12) "2001-3000元"
[5]=>
string(12) "3001-5000元"
[3]=>
string(12) "5001-8000元"
[2]=>
string(13) "8000元以上"
}
array(3) {
[1]=>
string(13) "1小時以內"
[2]=>
string(9) "1-3小時"
[0]=>
string(13) "3小時以上"
}