<?php
function sortByLen( $one, $two ) {
if ( strlen( $one ) == strlen( $two ) )
return 0;
else
return ( strlen( $one ) > strlen( $two ) ) ? 1 : -1;
}
$lamp = array( "Linux", "Apache", "MySQL", "PHP" );
usort( $lamp, "sortByLen" );
print_r( $lamp );
?>
排序后输出:Array ( [0] => PHP [1] => MySQL [2] => Linux [3] => Apache )
这里参数传入变量函数里的顺序是怎样的?
01
02
03
这样两个两个传进去比较的
还是
01
12
23
这种类似的方式传进去的
请问传递的依据又是什么呢?
你定义了一个比较函数,比较字符串的长度,并且作为参数传给排序函数。
排序函数根据此比较两个变量的大小,自然排序的结果是根据长度排序。
php因为只有3个字符,排最前,而apache有六个字符,排最后。
你说的排序函数内是怎么调用这个比较函数的,以及调用多少次,这个取决于排序算法的内部实现。
举个例子,随便找一个代码:http://blog.sina.com.cn/s/blog_610997850100ikxk.html
假设是这个代码
function maopao($arr)
{
$len = count($arr);
for($i=1; $i<$len; $i++)//最多做n-1趟排序
{
$flag = false; //本趟排序开始前,交换标志应为假
for($j=$len-1;$j>=$i;$j--)
{
if($arr[$j]<$arr[$j-1])//交换记录
{//如果是从大到小的话,只要在这里的判断改成if($arr[$j]>$arr[$j-1])就可以了
$x=$arr[$j];
$arr[$j]=$arr[$j-1];
$arr[$j-1]=$x;
$flag = true;//发生了交换,故将交换标志置为真
}
}
if(! $flag)//本趟排序未发生交换,提前终止算法
return $arr;
}
}
if($arr[$j]<$arr[$j-1])//交换记录
这个就相当于调用你的比较函数,而j 和 j-1 就是这个函数调用的两个参数。
你可以看到,不需要修改算法,只要修改这一行,就能根据不同条件排序。
而如果你希望排序算法不要修改,就把这一行提取出一个函数,放在外面,调用的时候传进来。