首页 > 后端开发 > php教程 > 关于使用自定义函数对数组排序,该如何处理

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

WBOY
发布: 2016-06-13 12:06:16
原创
1129 人浏览过

关于使用自定义函数对数组排序
比如函数uasort(),比较两个自定义函数:

<?php<br />function a_sort($a, $b){<br />	echo $a . '--' . $b . "<br />";<br />	if($a==$b) return 0;<br />	return ($a>$b) ? 1 : -1;<br />}<br />function b_sort($a, $b){<br />	echo $a . '--' . $b . "<br />";<br />	if($a==$b) return 0;<br />	return ($a>$b) ? -1 : 1;<br />}<br /><br />$arr = array('a'=>'what', 'b'=>'where', 'c'=>20, 'd'=>'how');<br />uasort($arr, 'a_sort');<br />print_r($arr);<br /><br />echo "<br />--------------------<br />";<br /><br />$arr = array('a'=>'what', 'b'=>'where', 'c'=>20, 'd'=>'how');<br />uasort($arr, 'b_sort');<br />print_r($arr);<br />?>
登录后复制


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

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板