查看完整版本: 求助:usort函数的用法,看例子

qloog 2008-3-27 16:27

求助:usort函数的用法,看例子

<?
function cmp($a,$b) {
    if ($a == $b) return 0;
    return ($a > $b) ? -1 : 1;
}
$a = array(3,2,5,6,1);
usort($a, cmp);
while(list($key,$value) = each($a)) {
    echo "$key: $value\n";
}
?>
步骤是如何的,我 有点不太懂,请高手指点。

chris 2008-3-27 17:00

意思就是根据cmp这个函数的规则来进行排序

cmp的参数从数组$a里取出,第一次使用第一个和第二个参数,根据cmp比较后返回的值 再跟第数据的第三个元素进行比较,依次往后进行比较

enze 2008-3-31 11:32

:023: :023: :009:

chris 2008-3-31 11:42

[quote]原帖由 [i]enze[/i] 于 2008-3-31 11:32 发表 [url=http://bbs.nowphp.com/redirect.php?goto=findpost&pid=2421&ptid=727][img]http://bbs.nowphp.com/images/common/back.gif[/img][/url]
:023: :023: :009: [/quote]

楼上的禁止灌水,给楼主举个例子吧

xinglu1983 2008-3-31 14:39

[quote]原帖由 [i]chris[/i] 于 2008-3-27 17:00 发表 [url=http://bbs.nowphp.com/redirect.php?goto=findpost&pid=2404&ptid=727][img]http://bbs.nowphp.com/images/common/back.gif[/img][/url]
意思就是根据cmp这个函数的规则来进行排序

cmp的参数从数组$a里取出,第一次使用第一个和第二个参数,根据cmp比较后返回的值 再跟第数据的第三个元素进行比较,依次往后进行比较 ... [/quote]

冒泡排序嘛~

enze 2008-4-1 13:21

例子例子,那就来个实用的吧。
[php]
<?php
/**
* ************************
* 数组如下
*/

$ary=array(0=>array('id'=>1,'name'=>'一级A','fid'=>0,'oid'=>1),
     1=>array('id'=>2,'name'=>'二级A','fid'=>1,'oid'=>1),
     2=>array('id'=>3,'name'=>'一级B','fid'=>0,'oid'=>2),
     3=>array('id'=>4,'name'=>'一级C','fid'=>0,'oid'=>3),
     3=>array('id'=>5,'name'=>'二级A','fid'=>2,'oid'=>1),
     3=>array('id'=>6,'name'=>'二级B','fid'=>1,'oid'=>2));
/**
* ************************
* @param array $array
*/
function getMenuSort(&$array)
{
        //对数组按照级别进行排序
        $code="if(\$a['fid']==\$b['fid'])";
        $code.="{";
        $code.="        return 0;";
        $code.="}";
        $code.="return (\$a['fid']>\$b['fid'])?1:-1;";
        uasort($array,create_function('$a, $b', $code));
        $c=array();
        $d=array();
        foreach ($array as $v)
        {
                $v['cid']=array();
                if($v['fid']==0)        //对根菜单按照oid排序
                {
                        $i = count($c);
                        $c[$i] = $v;
                        $d[$v[id]] =& $c[$i];
                        usort($c,create_function('$m, $n',"if(\$m['oid']==\$n['oid']){return 0;}return (\$m['oid']>\$n['oid'])?1:-1;"));
                }
                else        //对其他菜单按照oid排序
                {
                        $i = count($d[$v['fid']]['cid']);
                        $d[$v['fid']]['cid'][$i] = $v;
                        $d[$v['id']] =& $d[$v['fid']]['cid'][$i];
                        usort($d[$v['fid']]['cid'],create_function('$m, $n',"if(\$m['oid']==\$n['oid']){return 0;}return (\$m['oid']>\$n['oid'])?1:-1;"));
                }
        }
        $array=$c;
}
getMenuSort($ary);

?>
[/php]

[[i] 本帖最后由 enze 于 2008-4-1 13:31 编辑 [/i]]

sjtprruy 2008-4-3 14:42

return ($a > $b) ? -1 : 1;关键这个返回,可以看出是降序排列。。。。
改return ($a > $b) ? 1:-1;那就是升序排列。没什么难的。
页: [1]
查看完整版本: 求助:usort函数的用法,看例子