在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
最近学习遇到自定义数组排序函数usort()有些不了解,搜了很多地方都没有很好的解释,自己研究好久,发来与和我一样的初学者共享~ bool usort ( array 函数为对数组进行自己自定义排序,排序规则由 现在先对简单的一个函数进行分析: 1 <?php 2 function re($a,$b){ 3 return ($a<$b)?1:-1; 4 } 5 $x=array(1,3,2,5,9); 6 usort($x, 're'); 7 print_r($x); 8 ?> 打印结果为: 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<$b如果正确返回1,说明$a"大于"$b,则按照顺序$b->$a来排序;如果错误返回-1,说明说明$a"小于"$b,则按照顺序$a->$b来排序。 下面进行一个较为复杂的排序:对一个数组先奇后偶,然后再进行从大到小排序。 1 function Compare($str1, $str2) { 2 if (($str1 % 2 == 0) && ($str2 %2 == 0)) { 3 if ($str1 > $str2) 4 return - 1; 5 else 6 return 1; 7 } 8 if ($str1 % 2 == 0) 9 return 1; 10 if ($str2 % 2 == 0) 11 return -1; 12 return ($str2 > $str1) ? 1 : - 1; 13 } 14 $scores = array (22,57,55,12,87,56,54,11); 15 usort ( $scores, 'Compare' ); 16 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 ) 以上,整个函数运行完毕,顺利的到理想结果。 虽然对大神来说有点小儿科,但是跑通这个函数,还是充满了兴奋!
|
2022-08-19
2022-07-30
2022-08-17
2022-11-06
2022-08-17
请发表评论