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比较后返回的值 再跟第数据的第三个元素进行比较,依次往后进行比较
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;那就是升序排列。没什么难的。