示例陣列
$arr = [
['key1'=> 940, 'key2'=>'blah'],
['key1'=>23, 'key2'=>'this'],
['key1'=>894, 'key2'=>'that']
];
自定義排序函式
- 接收兩個引數
- 返回值表示哪個引數應該在前
- 返回負數或false,則第一個在前 (注意正序,倒序)
- 返回正數或true,則第二個在前
- 返回0,則相等
呼叫函式
- usort() 按值排序,不保留鍵
- uasort() 按值排序,保留鍵
- uksort() 按鍵排序
根據key1排序,數值
function asc_number_sort($x, $y) {
if ($x['key1'] > $y['key1']) {//第一個大於第二個,返回true,則第二個在前,可見是正序排序,如果反過來則是倒序
return true;
} elseif ($x['key1'] < $y['key1']) {
return false;
} else {
return 0;
}
}
usort($arr, 'asc_number_sort');
根據key2排序,字串
function string_sort($x, $y) {
return strcasecmp($x['key2'], $y['key2']);//strcmp()區分大小寫
}
usort($arr, 'string_sort');
在看一個例子
$students = [
256 => ['name'=>'Jon', 'grade'=>98.5],
2 => ['name'=>'Vance', 'grade' =>85.1],
9 => ['name'=>'Stephen', 'grade'=>94.0],
364 => ['name'=>'Steve', 'grade'=>85.1],
68 => ['name'=>'Rob', 'grade'=>74.6]
];
function name_sort($x, $y) {
return strcasecmp($x['name'], $y['name']);//strcasecmp()返回一個數值,如果是負數,則第一個在前,如果是正數,則第二個在前,如果0,則相等
}
function grade_sort($x, $y) {
return $x['grade'] < $y['grade'];//小於返回true,則第二個在前,倒序
}
uasort($students, 'name_sort');//保留學生id
本作品採用《CC 協議》,轉載必須註明作者和本文連結