很明显你并没有看明白uksort这个函数的用法。他所调用的用户函数的返回值必须是-1,0,1

解决方案 »

  1.   

    function mycompare($a,$b){
    if($a==$b)return 0;//返回0?//如果相等就返回0,这好像不用再怎么解释
    return($a>$b)?-1:1;//更搞不懂了!郁闷!//如果a大于b,则返回-1,否则返回1
    }
    $a=array(4=>"four",2=>"two",3=>"three");
    uksort($a,mycompare);//uksort --  使用用户自定义的比较函数对数组中的键名进行排序 
    经过uksort处理,数组自然就变成了,你打印出来的结果。
    这个手册上写的很清楚:
    /**************************************************bool uksort ( array &array, callback cmp_function )本函数将使用用户提供的比较函数对数组中的键名进行排序。如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。 cmp_function 函数应接受两个参数,该参数将被 array 中的一对键名填充。比较函数在第一个参数小于,等于,或大于第二个参数时必须分别返回一个小于零,等于零,或大于零的整数。 如果成功则返回 TRUE,失败则返回 FALSE。 **************************************************/
    while(list($key,$value)=each($a))
    {
      echo "$key:$value/n"
    }
      

  2.   

    uksort --  使用用户自定义的比较函数对数组中的键名进行排序
      

  3.   

    不能返回逻辑值,因为逻辑值只有:true(大于0)和false(等于0)两种,而uksort的回调函数需要返回三种状态1、0、-1uksort内部如何排序请参见原代码,一般不需要知道返回值的作用
    0 不做任何动作
    1 将$a移到$b的后面
    -1 将$a移到$b前面
    这样,你就可以自己控制排序的结果了
      

  4.   

    谢谢xuzuning(唠叨) ,明白了!