- 3月 08 週四 201809:56
[PHP] usort() 自訂排序
最近碰到需要依照陣列中某個元素來做排序,使用一般的sort都無法滿足
找到usort這個function,可以自訂排序方式。
usort() 通过用户自定义的比较函数对数组进行排序。
usort(array,myfunction);
| 参数 | 描述 |
|---|---|
| array | 必需。规定要进行排序的数组。 |
| myfunction | 可选。定义可调用比较函数的字符串。如果第一个参数小于等于或大于第二个参数,那么比较函数必须返回一个小于等于或大于 0 的整数。 |
usort() 函数使用用户自定义的函数对数组排序。
注释:如果两个元素比较结果相同,则它们在排序后的数组中的顺序未经定义。到 PHP 4.0.6 之前,用户自定义函数将保留这些元素的原有顺序。但是由于在 4.1.0 中引进了新的排序算法,结果将不是这样了,因为对此没有一个有效的解决方案。
注释:本函数为 array 中的元素赋予新的键名。这会删除原有的键名。
--
範例如下
Example #2 usort() example using multi-dimensional array
<?php
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");
while (list(key, value) = each(fruits)) {
echo "\fruits[key]: " . value["fruit"] . "\n";
}
?>When sorting a multi-dimensional array, a and b contain references to the first index of the array.
The above example will output:
fruits[0]: apples fruits[1]: grapes fruits[2]: lemons
--
PHP 5.3之後可以使用暱名函式,可以寫成這樣:
Starting in PHP 5.3, you can use an anonymous function:
usort(myArray, function(a, b) {
return a['order'] - b['order'];
});
--
參考自
https://stackoverflow.com/questions/2699086/sort-multi-dimensional-array-by-value
http://www.w3school.com.cn/php/func_array_usort.asp
http://php.net/manual/en/function.usort.php
--
--