13 12
发新话题
打印

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

求助: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 P币 +2 2008-3-31 11:43

TOP

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

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

TOP

广告位招租。

TOP

引用:
原帖由 enze 于 2008-3-31 11:32 发表
楼上的禁止灌水,给楼主举个例子吧

TOP

引用:
原帖由 chris 于 2008-3-27 17:00 发表
意思就是根据cmp这个函数的规则来进行排序

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

TOP

例子例子,那就来个实用的吧。
复制内容到剪贴板
代码:

<?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);



?>

[ 本帖最后由 enze 于 2008-4-1 13:31 编辑 ]
广告位招租。

TOP

return ($a > $b) ? -1 : 1;关键这个返回,可以看出是降序排列。。。。
改return ($a > $b) ? 1:-1;那就是升序排列。没什么难的。

TOP

 13 12
发新话题