关于使用自定义函数对数组排序,该如何处理

关于使用自定义函数对数组排序
比如函数uasort(),比较两个自定义函数:
<?php
function a_sort($a, $b){
echo $a . '--' . $b . "<br />";
if($a==$b) return 0;
return ($a>$b) ? 1 : -1;
}
function b_sort($a, $b){
echo $a . '--' . $b . "<br />";
if($a==$b) return 0;
return ($a>$b) ? -1 : 1;
}

$arr = array('a'=>'what', 'b'=>'where', 'c'=>20, 'd'=>'how');
uasort($arr, 'a_sort');
print_r($arr);

echo "<br />--------------------<br />";

$arr = array('a'=>'what', 'b'=>'where', 'c'=>20, 'd'=>'how');
uasort($arr, 'b_sort');
print_r($arr);
?>


1、自定义函数是如何工作的。如a_sort:第一次$a='where', $b='what';第二次又是$a=where, $b=20.....为什么会是这样?
2、return 0, 1, -1表示什么意思,如何影响排序?
------解决方案--------------------
第一次$a='where', $b='what';第二次又是$a=where, $b=20 是排序规则起的作用
($a>$b) ? 1 : -1;表示从小到大 ($a>$b) ? -1 : 1;表示从大到小( 数字要比字母大)
------解决方案--------------------
1、自定义函数是如何工作的。如a_sort:第一次$a='where', $b='what';第二次又是$a=where, $b=20.....为什么会是这样?
$a,$b是a_sort,b_sort方法定义的参数,每次都会把数组中的需要比较的元素通过$a,$b这两个参数传入到方法执行比较。
所以每次的$a,$b是不同的。

第一次$a='where', $b='what';第二次又是$a=where, $b=20.
因为比较过程就是,把数组中每一个元素都与其他元素做一次比较。
现在$arr = array('a'=>'what', 'b'=>'where', 'c'=>20, 'd'=>'how');
所以会执行
a b
a c
a d
比较
然后
b c
b d
最后
c d
比较

2.return 0, 1, -1表示什么意思,如何影响排序?
0 相等
1 大于
-1 小于

------解决方案--------------------
呵呵,#1等于没说,#2只按一般原理说了
没有说明为什么是
where--what
where--20
how--where
what--how

自定义排序函数采用的是双向冒泡算法并结合了插入排序算法
比较是从中心向两端展开的

第2问手册已经说的很清楚了:
比较函数必须在第一个参数被认为小于,等于或大于第二个参数时分别返回一个小于,等于或大于零的整数。