Blogger Information
Blog 36
fans 1
comment 0
visits 32363
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
关于PHP中usort()函数的解读
宋超的博客
Original
1227 people have browsed it

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

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

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

实例

<?php
function re($a,$b){
    return ($a<$b)?1:-1;
}
$x=array(1,3,2,5,9);
usort($x, 're');
print_r($x);
?>

运行实例 »

点击 "运行实例" 按钮查看在线实例

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

  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来排序。

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

实例

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进行从大到小排序;

运行实例 »

点击 "运行实例" 按钮查看在线实例

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

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!