3 回答

TA貢獻1786條經驗 獲得超11個贊
array_multisort派上用場,只需將有序范圍用作第二個數組($order只是臨時的,它用于按其原始順序對第一個數組的等效項進行排序):
$a = [
"key-0" => 5,
"key-99" => 3,
"key-2" => 3,
"key-3" => 7
];
$order = range(1,count($a));
array_multisort($a, SORT_ASC, $order, SORT_ASC);
var_dump($a);
輸出量
array(4) {
["key-99"]=>
int(3)
["key-2"]=>
int(3)
["key-0"]=>
int(5)
["key-3"]=>
int(7)
}
我使用帶有未排序鍵的測試數據來證明它可以正常工作。盡管如此,這是測試腳本的輸出:
Array
(
[key-1] => 10
[key-4] => 10
[key-5] => 20
[key-8] => 20
[key-6] => 30
[key-9] => 30
[key-2] => 40
[key-0] => 50
[key-3] => 50
[key-7] => 50
)
缺點
它僅適用于預定義的比較,不能使用自己的比較功能??赡艿闹担ǖ牡诙€參數array_multisort())為:
排序類型標志:
SORT_ASC -升序排序。
SORT_DESC -遞減排序。
SORT_REGULAR -通常比較商品(不要更改類型)
SORT_NUMERIC -數字比較項目
SORT_STRING -比較項目作為字符串
SORT_LOCALE_STRING-根據當前語言環境將項目作為字符串進行比較。它使用語言環境,可以使用 setlocale()
SORT_NATURAL -使用“自然順序”將項目作為字符串進行比較 natsort()
SORT_FLAG_CASE-可以與SORT_STRING或組合(按位或)以SORT_NATURAL區分大小寫的字符串

TA貢獻1799條經驗 獲得超6個贊
為了完整起見,您還應該查看Schwartzian變換:
// decorate step
$key = 0;
foreach ($arr as &$item) {
$item = array($item, $key++); // add array index as secondary sort key
}
// sort step
asort($arr); // sort it
// undecorate step
foreach ($arr as &$item) {
$item = $item[0]; // remove decoration from previous step
}
PHP的默認排序算法正常工作與陣列,因為這樣:
array(1, 0) < array(2, 0); // true
array(1, 1) < array(1, 2); // true
如果你想使用自己的分類標準可以使用uasort(),以及:
// each parameter is an array with two elements
// [0] - the original item
// [1] - the array key
function mysort($a, $b)
{
if ($a[0] != $b[0]) {
return $a[0] < $b[0] ? -1 : 1;
} else {
// $a[0] == $b[0], sort on key
return $a[1] < $b[1] ? -1 : 1; // ASC
}
}
添加回答
舉報