通常我们对二维数组进行排序时,
使用循环的方法进行处理,
这里介绍一下,不使用循环;
如何对二维数组进行排序。
方法一:先循环,在使用函数处理顺序
/** * [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" }
示例二:排序多维数组
$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);
原始:
排序后:
微信扫码查看本文
发表评论