最近碰到需要依照陣列中某個元素來做排序,使用一般的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";
}
?>
strcmp(string1,string2)
参数 描述
string1 必需。规定要比较的第一个字符串。
string2 必需。规定要比较的第二个字符串。
技术细节
返回值:
本函数返回:
0 - 如果两个字符串相等
<0 - 如果 string1 小于 string2
>0 - 如果 string1 大于 string2
PHP 版本: 4+
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
--
--
留言列表