现成示例代码:
/**
* 排序二维数组
*
* @param $arr
* @param $key
* @param int $type
* @param int $short
* @return mixed
*/
public function multi_array_sort($arr, $key, $type = SORT_REGULAR, $short = SORT_DESC)
{
$name = [];
foreach ($arr as $k => $v) {
$v = (array)$v;
$name[$k] = $v[$key];
}
array_multisort($name, $type, $short, $arr);
return $arr;
}
手册介绍的着实蛮难理解的:
array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。
关联( string )键名保持不变,但数字键名会被重新索引。
网上看了蛮多例子,现在总结记录下来备用。
一、一维数组排序
$a=array("Dog","Cat","Horse","Bear","Zebra");
array_multisort($a);
print_r($a);
结果:
Array(
[0] => Bear
[1] => Cat
[2] => Dog
[3] => Horse
[4] => Zebra)
上面就是按照普通的字母升序排列(A,B,C,D...),没什么好讲的
二、多个一维数组排序
$ar1 = array(22,12,3);
$ar2 = array(1,3,7);
array_multisort($ar1, $ar2);
echo '';
print_r($ar1);
print_r($ar2);
结果:
Array(
[0] => 3
[1] => 12
[2] => 22
)
Array
(
[0] => 7
[1] => 3
[2] => 1
)
$ar1和$ar2分别为列名,然后如sql语句一样select * from table order by $ar1 asc ,$ar2 asc 排序即可
三、多维数组排序
通常我们从数据库取出来的
$data=array(
array('id' => 67, 'score' => 20,'name'=>'小明'),
array('id' => 86, 'score' => 10,'name'=>'小红'),
array('id' => 85, 'score' => 60,'name'=>'小花')
);
foreach ($data as $key => $row) {
$id[$key] = $row['id'];
$score[$key] = $row['score'];
}
array_multisort($id, SORT_ASC, $data);
echo "";
print_r($data);
结果:
Array
(
[0] => Array
(
[id] => 67
[score] => 2
[name] => 小明
)
[1] => Array
(
[id] => 85
[score] => 6
[name] => 小花
)
[2] => Array
(
[id] => 86
[score] => 1
[name] => 小红
)
)
如果想按照某个字段排序 ,先循环获取到所有该字段的值形成一个数组,然后按照该字段排序即可。然后如sql语句一样select * from table order by $id asc 排序即可