$arr= array('apache' => 4, 'mysql' => 3, 'php' => 2, 'linux' => 1);        //定义数组
function cmp($a, $b)         //自定义比较函数'cmp'
{
    if ($a == $b) {
        return 0;
    }
    return ($a > $b) ? -1 : 1;
}uksort($arr,'cmp');           //为数组键名排序print_r($arr);                //输出:Array ( [php] => 2 [mysql] => 3 [linux] => 1 [apache] => 4 ) 该程序用系统函数uksort()为数组$arr的键名排序,结果是降序排列。我的疑惑是:
          为什么是降序?当在比较函数中写" return ($a > $b) ? 1 : -1; "时又会是升序排列,虽然我会使用,但希望了解一下原因,请各位朋友解答一下。

解决方案 »

  1.   

    你的程序貌似跟手册的如出一辙,既然这样,看看手册是这样写的bool uksort ( array &$array , callback $cmp_function )
    本函数将使用用户提供的比较函数对数组中的键名进行排序。如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。 cmp_function 函数应接受两个参数,该参数将被 array 中的一对键名填充。比较函数在第一个参数小于,等于,或大于第二个参数时必须分别返回一个小于零,等于零,或大于零的整数。 很明显,($a > $b) ? -1 : 1 符号跟上面说的方向相反,当然就是逆排序了