php提供的數組自定義排序函數
uasort使用用戶自定義的比較函數對數組中的值進行排序並保持索引關聯
bool uasort(array &$array,callable $cmp_function)
uksort()使用用戶自定義的比較函數對數組中的鍵名進行排序
usort()使用用戶自定義的比較函數對數組中的值進行排序
相關例子:
對三維數組進行排序
function cmp($a, $b){
return strcmp($a["fruit"], $b["fruit"]);}
$fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes";
usort($fruits, "cmp");
print_r($fruits);
//輸出結果:
Array(
[0] => Array([fruit] => apples)
[1] => Array([fruit] => grapes)
[2] => Array([fruit] => lemons))
以對象作爲回調函數對數組進行排序
class Obj{
var $letter;
function Obj($letter){
$this->letter = $letter;
}
//靜態的 比較函數
static function cmp_obj($a,$b){
$a = strtolower($a -> name);
$b = strtolower($b -> name);
if($a == $b){
return 0;
}
return ($a > $b) ? 1: -1;
}
}
$a[] = new TestObj("f");
$a[] = new TestObj("h");
$a[] = new TestObj("z");
usort($a, array("TestObj", "cmp_obj"));
var_dump($a);
//輸出結果
array(3) {
[0]=> object(TestObj)#1 (1) {
["name"]=> string(1) "f"}
[1]=> object(TestObj)#2 (1) {
["name"]=> string(1) "h" }
[2]=> object(TestObj)#3 (1) {
["name"]=> string(1) "z" }
}
將數組以另一個數組的順序進行排序
$arrayList = array("拜年","過年好","happy new year","雞年","紅包","QQ",
"Logo","富貴雙全","健康快樂","開工利");
$newYear = array( "雞年","過年好","紅包","QQ","Logo","拜年","happy new year",
"開工利","富貴雙全","健康快樂");
usort($newYear,function($a,$b) use($arrayList){
$indexB = array_search($b,$arrayList);
$indexA = array_search($a,$arrayList);
if($indexA == $indexB){
return 0;
}
return $indexA < $indexB ? -1 :1;
});
var_dump($newYear);
//輸出結果:
array(10) {
[0]=>string(6) "拜年"
[1]=>string(9) "過年好"
[2]=>string(14) "happy new year"
[3]=>string(6) "雞年"
[4]=>string(6) "紅包"
[5]=>string(2) "QQ"
[6]=>string(4) "Logo"
[7]=>string(12) "富貴雙全"
[8]=>string(12) "健康快樂"
[9]=>string(9) "開工利"
}