close

最近碰到需要依照陣列中某個元素來做排序,使用一般的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

 

--

--

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 dizzy03 的頭像
    dizzy03

    碎碎念

    dizzy03 發表在 痞客邦 留言(0) 人氣()