From: http://www.php100.com/cover/php/2395.html
usort
(PHP 4, PHP 5)
usort — 使用用户自定义的比较函数对数组中的值进行排序
说明
bool usort ( array &$array , $cmp_function )
本函数将用用户自定义的比较函数对一个数组中的值进行排序。如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。
比较函数必须在第一个参数被认为小于,等于或大于第二个参数时分别返回一个小于,等于或大于零的整数。
Note:
如果两个成员比较结果相同,则它们在排序后的数组中的顺序未经定义。到 PHP 4.0.6 之前,用户自定义函数将保留这些单元的原有顺序。但是由于在 4.1.0 中引进了新的排序算法,结果将不是这样了,因为对此没有一个有效的解决方案。
Note: 此函数为 array 中的元素赋与新的键名。这将删除原有的键名,而不是仅仅将键名重新排序。
成功时返回 TRUE, 或者在失败时返回 FALSE.
Example #1 usort() 例子
<?phpfunction cmp($a, $b){ if ($a == $b) { return 0; } return ($a < $b) ? -1 : 1;}$a = array(3, 2, 5, 6, 1);usort($a, "cmp");foreach ($a as $key => $value) { echo "$key: $value ";}?>
以上例程会输出:
0: 11: 22: 33: 54: 6
Note:
很明显在这个小例子中用 函数更合适。
Example #2 使用多维数组的 usort() 例子
<?phpfunction 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"] . " ";}?>
当排序多维数组时,$a 和 $b 包含到数组第一个索引的引用。
以上例程会输出:
$fruits[0]: apples$fruits[1]: grapes$fruits[2]: lemons
Example #3 使用对象的成员函数的 usort() 例子
<?phpclass TestObj { var $name; function TestObj($name) { $this->name = $name; } /* This is the static comparing function: */ function cmp_obj($a, $b) { $al = strtolower($a->name); $bl = strtolower($b->name); if ($al == $bl) { return 0; } return ($al > $bl) ? +1 : -1; }}$a[] = new TestObj("c");$a[] = new TestObj("b");$a[] = new TestObj("d");usort($a, array("TestObj", "cmp_obj"));foreach ($a as $item) { echo $item->name . " ";}?>
以上例程会输出:
bcd
参见 ,,,,,, 和 。
------------------------------------------
如果将类的静态函数作为自定义排序函数,则写法为:usort($arr, array('self', 'staticFunction'));