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

2019-10-28 22:03:06  阅读 3812 次 评论 0 条

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

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

/**
 * [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 递增。
注释:您可以在每个数组后设置排序顺序和排序类型参数。如果没有设置,每个数组参数会使用默认值。

5d4d373015e06.png

5d4d373015e06.png

示例一:多个数组排序

$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" }


5d4d373015e06.png

示例二:排序多维数组

$array = array(
	array(2, 1, 3 ),
	array('c', 'a', 'b' )
);
array_multisort($array[0], SORT_ASC, $array[1], SORT_DESC);
var_dump($array);

5d4d373015e06.png

本例中,我们对第一个数组进行升序,对第二个数组降序,然后打印出总的数组,
但是从输出结果中我们看到,第二个数组按照第一个数组变化的顺序进行了排序。

示例三:对数据库结果进行排序(二维数组排序)

$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);

原始:

5d4d373015e06.png

排序后:

5d4d373015e06.png



微信扫码查看本文
本文地址:https://www.yangguangdream.com/?id=2050
版权声明:本文为原创文章,版权归 编辑君 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?