算法-大家能否提供一个对二维数组高效的排序方法
例如$arr=array(
‘a’=> array('id'=>1,'type'=>'a'),
‘b’=>array('id'=>5,'type'=>'a'),
‘c’=> array('id'=>2,'type'=>'a'),
.........
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
$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;
}
下面适合多维的数组排序:
<?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);
?>
$arr=array(
'a'=> array('id'=>1,'type'=>'a'),
'b'=>array('id'=>5,'type'=>'a'),
'c'=> array('id'=>2,'type'=>'5'),
);
array_multisort($arr);
function mysort($a, $b) {
if ($a['id'] == $b['id']) return 0;
return ($a["id"] >$b['id']) ? -1 : 1;
}
usort($info, 'mysort');
PHP本身是有一个多维数组排序的函数的。
bool array_multisort ( array $ar1 [, mixed $arg [, mixed $... [, array $... ]]] )
PHP中二维数组的排序方法