通常我们对二维数组进行排序时,
使用循环的方法进行处理,
这里介绍一下,不使用循环;
如何对二维数组进行排序。
方法一:先循环,在使用函数处理顺序
/**
* [array_sort 多维数组排序]
* @param [type] $array [数组]
* @param [type] $key [键名]
* @return [type] [description]
*/
function array_sort($array, $key) {
$result = array();
$values = array();
foreach ($array as $id => $value) {
$values[$id] = $value[$key];
}
asort($values);
foreach ($values as $key => $value) {
$result[$key] = $array[$key];
}
return $result;
}
方法二:使用系统函数对多维数组进行排序(array_multisort)
/**
* [array_sort 多维数组排序]
* @param [type] $array [数组]
* @param [type] $key [键名]
* @return [type] [description]
*/
function array_sort($array, $key, $type='ASC') {
$type = strtoupper($type) == 'ASC' ? SORT_DESC : SORT_ASC;
$key_array = array_column($array, $key);
array_multisort($key_array, $type, $array);
return $array;
}
array_multisort()
函数返回一个排序数组。您可以输入一个或多个数组。函数先对第一个数组进行排序,接着是其他数组,如果两个或多个值相同,它将对下一个数组进行排序。
(当有多个数组时,每个数组都将根据前一个数组的顺序进行排序)
注释:字符串键名将被保留,但是数字键名将被重新索引,从 0 开始,并以 1 递增。
注释:您可以在每个数组后设置排序顺序和排序类型参数。如果没有设置,每个数组参数会使用默认值。
示例一:多个数组排序
$a1 = array(2, 1, 3 );
$a2 = array('c', 'a', 'b' );
array_multisort($a1, $a2);
var_dump($a1); // array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }
var_dump($a2); // array(3) { [0]=> string(1) "a" [1]=> string(1) "c" [2]=> string(1) "b" }
这个例子里,排序后,第一个数组会包含 1、 2、 3。 第二个数组会包含 a、c、b。
第二个数组里的项目顺序对应第一个数组的顺序,也进行了排序。
示例二:排序多维数组
$array = array(
array(2, 1, 3 ),
array('c', 'a', 'b' )
);
array_multisort($array[0], SORT_ASC, $array[1], SORT_DESC);
var_dump($array);
本例中,我们对第一个数组进行升序,对第二个数组降序,然后打印出总的数组,
但是从输出结果中我们看到,第二个数组按照第一个数组变化的顺序进行了排序。
示例三:对数据库结果进行排序(二维数组排序)
$array = array(
array('volume' => 67, 'edition' => 2),
array('volume' => 86, 'edition' => 1),
array('volume' => 85, 'edition' => 6),
array('volume' => 98, 'edition' => 2),
array('volume' => 86, 'edition' => 6),
array('volume' => 67, 'edition' => 7),
);
// 返回数组中指定的一列(array_column)
$volume_array = array_column($array, 'volume');
$edition_array = array_column($array, 'edition');
array_multisort($volume_array, SORT_DESC, $edition_array, SORT_ASC, $array);
var_dump($array);
原始: | 排序后:
本文为冯奎原创文章,转载无需和我联系,但请注明来自冯奎博客fengkui.net
最新评论