大家能否提供一个对二维数组高效的排序方法

例如$arr=array(

  
‘a’=> array('id'=>1,'type'=>'a'),
‘b’=>array('id'=>5,'type'=>'a'),
‘c’=> array('id'=>2,'type'=>'a'),
.........

);
根据id的值进行排序,同时保留键值。

评论 (0)链接2012-02-20 

下面适合多维的数组排序:

  
<?php
//利用array_map获取要依据排序的数组
$arrField=array(

'a'=> array('id'=>1,'type'=>'a'),
'b'=>array('id'=>5,'type'=>'a'),
'c'=> array('id'=>2,'type'=>'a'),
);
$arr = array_map(create_function('$n', 'return $n["id"];'), $arrField);
//利用array_mutisort来进行排序
array_multisort($arr, SORT_DESC,$arrField);
print_r($arrField);
?>
小飞
小飞
6832
编辑于 2012-03-02
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (2)链接 • 2012-02-20
  • 0 支持
    array_map(create_function('$n', 'return $n["id"];'), $arrField); 这句与
    foreach($arr as $key => $val) { $orderby[$key] = $val;} 这个哪个好?
    – 冯义军 2012-02-20
  • 0 支持
    你可以测试一下,数据量多些。再者这个可以扩展多维数组,如果多维循环的话就多嵌套一层,数据量大的话可想而知! – 张洪保 2012-02-20
  
$arr=array(
'a'=> array('id'=>1,'type'=>'a'),
'b'=>array('id'=>5,'type'=>'a'),
'c'=> array('id'=>2,'type'=>'5'),
);
$orderby = array();
foreach($arr as $key => $val) { $orderby[$key] = $val;}
array_multisort($orderby,SORT_ASC,$arr);
//array_multisort($orderby,SORT_DESC,$arr); //安装id降序

var_dump($arr)

;

有一个封装好的函数:

  
/**
* 二维数组根据特定键值索引排序
* @param $arr array 二维数组
* @param $orderbyKey string 特定索引
* @param $type string asc or desc
* @return array
*/
function arrayOrderBy($arr, $orderbyKey, $type = 'ASC') {
$column = array();
foreach($arr as $key => $value) {
$column[$key] = $value[$orderbyKey];
}
$type = strtoupper($type) == "ASC" ? SORT_ASC : SORT_DESC;
array_multisort($column, $type, $arr);
return $arr;
}
小飞
小飞
6832
编辑于 2012-03-02
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-02-20

PHP本身是有一个多维数组排序的函数的。
bool array_multisort ( array $ar1 [, mixed $arg [, mixed $... [, array $... ]]] )

PHP中二维数组的排序方法

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-02-20
  
$arr=array(
'a'=> array('id'=>1,'type'=>'a'),
'b'=>array('id'=>5,'type'=>'a'),
'c'=> array('id'=>2,'type'=>'5'),
);
array_multisort($arr);
小飞
小飞
6832
编辑于 2012-03-02
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-02-20
  
function mysort($a, $b) { 
if ($a['id'] == $b['id']) return 0;
return ($a["id"] >$b['id']) ? -1 : 1;
}
usort($info, 'mysort');
小飞
小飞
6832
编辑于 2012-03-02
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-02-23

不是您所需,查看更多相关问题与答案

德问是一个专业的编程问答社区,请 登录注册 后再提交答案