PHP根据键值对二维数组排序

通常我们对二维数组进行排序时,
使用循环的方法进行处理,
这里介绍一下,不使用循环;
如何对二维数组进行排序。

方法一:先循环,在使用函数处理顺序

/**
 * [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);

原始:冯奎博客 | 排序后:冯奎博客

冯奎博客
请先登录后发表评论
  • latest comments
  • 总共0条评论