免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3886 | 回复: 1
打印 上一主题 下一主题

请教 PHP usort函数是如何排序的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-30 10:54 |只看该作者 |倒序浏览
看了一段代码。没有明白USORT是如何排定数组的中元素位置的。
<html>
<head>
<title>对数组自定义排序函数使用实例</title>
</head>
<body>
<?
$temp=array("班长","无职务","副班长","团支书","无职务","副班长");        //定义数组$temp
function cmp($a,$b)                                                                                //自定义排序函数
{
        if($a=="团支书")                                                                        //第一个参数为团支书的情况
        {
                if($b=="团支书")
                return 0;
                elseif($b=="班长")
                return -1;
                elseif($b=="副班长")
                return -1;
                else
                return -1;
        }
        elseif($a=="班长")                                                                        //第一个参数为班长的情况
        {
                if($b=="团支书")
                return 1;
                else if($b=="班长")
                return 0;
                else if($b=="副班长")
                return -1;
                else
                return -1;
        }
        elseif($a=="副班长")                                                                        //第一个参数为副班长的情况
        {
                if($b=="团支书")
                return 1;
                else if($b=="班长")
                return 1;
                else if($b=="副班长")
                return 0;
                else
                return -1;
        }
        else                                                                                                //第一个参数为无职务的情况
        {
                if($b=="团支书")
                return 1;
                else if($b=="班长")
                return 1;
                else if($b=="副班长")
                return 1;
                else
                return 0;
        }
}                                                                                                //根据不同情况返回不同的值
echo "数组temp原始顺序为:";
echo "<p>";
for($i=0;$i<count($temp);$i++)                                                        //通过循环打印原始数组
{
        echo $temp[$i].",";
}
usort($temp,"cmp");                                                                        //对数组进行usort处理
echo "<p>";
echo "数组temp经过usort处理过的顺序为;";
echo "<p>";
for($i=0;$i<count($temp);$i++)                                                        //通过循环打印处理过的数组
{
        echo $temp[$i].",";
}
?>
</body>
</html>

当调用函数CMP时,通过各种情况的比较后,函数会返回 0 ,-1 ,1 三个不同的值。之后USORT是如何处理这个结里呢?想了好久不解其中的原因?

[ 本帖最后由 wwl 于 2008-5-30 10:56 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-10-17 20:10 |只看该作者

unsort()

(我也找不到精确答案,就暂时写出我的看法吧。)a,b,仅是临时代替数组的值,扫描一次原数组,捕获一个元素,如‘班长’,再捕获一个如‘副班长’,在自己定义的fun()中进行
自定义比较,这里要求是‘班长’大于‘副班’故返让回1(正数均可),则系统将‘班长’排列在‘副班长’前面。以此类推,b元素要么在a前,或后面。
在原数组的所有元素比较完后,一列自定义比较的结果也就出现啦。(你看呢?是郑州工学院的吗?)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP