php usort函数,关于PHP中usort()函数的解读,以及一些经验分享

太原学府中心-psd-温磊

最近学习遇到自定义数组排序函数usort()有些不了解,搜了很多地方都没有很好的解释,自己研究好久,发来与和我一样的初学者共享~

bool usort ( array &$array , callable $cmp_function )

函数为对数组进行自己自定义排序,排序规则由 $cmp_function 定义。返回值为ture 或者false。

现在先对简单的一个函数进行分析:

return ($a

}

$x=array(1,3,2,5,9);

usort($x, 're');

print_r($x); ?>

打印结果为:

Array( [0] => 9   [1] => 5    [2] => 3    [3] => 2    [4] => 1)

实现了数组的倒序排列。分析如下:

usort两两提取数组中的数值,并按顺序输入自定义函数中,自定义函数根据内容返回1或者-1;usort根据返回值为1或者-1,得到传入的数值1“大于”或者“小于”数值2,然后对数值进行从小到大的排序。即:返回值为1,说明数值1“大于”数值2,然后排序:数值2—>数值1;返回值为-1,说明数值1“小于”数值2,然后排序:数值1->数值2。

上面自定义函数中,$a$a来排序;如果错误返回-1,说明说明$a"小于"$b,则按照顺序$a->$b来排序。

下面进行一个较为复杂的排序:对一个数组先奇后偶,然后再进行从大到小排序。

function Compare($str1, $str2) {

if (($str1 % 2 == 0) && ($str2 %2 == 0)) {

if ($str1 > $str2)

return - 1;

else

return 1;

}

if ($str1 % 2 == 0)

return 1;

if ($str2 % 2 == 0)

return -1;

return ($str2 > $str1) ? 1 : - 1;

}

$scores = array (22,57,55,12,87,56,54,11);

usort ( $scores, 'Compare' );

print_r ($scores );

实现步骤为:

1》判断输入的两个值是否都为偶数,都为偶数,进行从大到小排序;

2》如果不都为偶数,则至少一个为奇数,先判断$str1是否为偶数,如果为偶数,即:if($str1%2==0)成立,则返回1,意味着$str1“大于”$str2,则usort函数进行排序为“小的”$str2->“大的”$str1(偶数);

3》如果$str1为奇数,上面不返回任何值,接着判断$str2是否为偶数,如果为偶数,则返回-1,意味着$str1“小于”$str2,则usort函数进行排序为“小的”$str1(奇数)->“大的”$str2(偶数);

4》如果两个值都为奇数,则上面不返回任何值,接着对$str1和$str2进行从大到小排序;

输出结果为:

Array(    [0] => 87    [1] => 57    [2] => 55    [3] => 11    [4] => 56    [5] => 54    [6] => 22    [7] => 12)

以上,整个函数运行完毕,顺利的到理想结果。

下面为一些个人研究代码的一些小儿科的经验,希望能抛砖引玉。   1》 对于一些比较难理解的函数,可以对函数的参数进行“不规范”的定义,通过不同的“不规范”的参数得到一些“奇奇怪怪”的结果来揣测函数的原理。然后再由特殊推广到一般,得出函数真正的原

理。

2》对于一些比较复杂的编码,理解其原理可以通过以下几步

(A)运行一次程序,然后通过传入数据和传出数据得出程序大概作用;

(B)看源码,跟着源码大概走一遍,对其各种功能进行分段;

(C)使用echo、print_r、var_dump对难以理解的某一段进行输出,并在后边加exit进行截断:对每一段小功能进行剖析理解。

3》最后,代码一定要写注释,虽然开始写起来很烦,而且写代码有一种不顺畅的感觉。不过真的很有用,特别是代码行数越来越多的情况下。

以上~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值