PHP - 通过指定列对二维(多维)数组进行排序

array_column()方法

用途: 返回指定数组中某个单一列的值。
语法: array_column(array, column_key, index_key)
参数说明:

  • array 必需,指定要使用的多维数组。
  • column_key 必需,需要返回值的列。可以是索引数组的列的整数索引,或者是关联数组的列的字符串键值。
  • index_key 可选。
    用法示例:
$colors = [
	[
		'id' => 1,
		'name' => 'red',
		'code' => 'ff0000'
	],
	[
		'id' => 2,
		'name' => 'green',
		'code' => '00ff00'
	],
	[
		'id' => 3,
		'name' => 'blue',
		'code' => '0000ff'
	]
];

// 提取name列的值
$color_names = array_column($colors, 'name');

array_multisort()方法

用途: 对多个数组或多维数组进行排序。

  • 返回排序后的数组
  • 可同时对多个数组进行排序,后面数组的排列顺序默认与第一个保持一致
  • 函数先对第一个数组进行排序,然后是其他数组,如果两个或多个值相同,它将对下一个数组进行排序
  • 字符串键名将被保留,但数字键名将被重新索引,从0开始,并以1递增
  • 可以在每个数组后设置排列顺序和排序类型参数
    语法: array_multisort(array1, sorting_order, sorting_type, array2, array3 ...)
    参数说明:
  • array1 必需,规定数组。
  • sorting_order 可选,指定排列顺序
    • SORT_ASC 升序,默认
    • SORT_DESC 降序
  • sorting_type 可选,指定排序类型
    • SORT_REGULAR 默认,把每一项按常规顺序排列(Standard ASCII,不改变类型)
    • SORT_NUMERIC 把每一项作为数字来处理
    • SORT_STRING 把每一项作为字符串来处理
    • SORT_LOCALE_STRING 把每一项作为字符串来处理,基于当前区域设置(可通过 setlocale() 进行更改)
    • SORT_NATURAL 把每一项作为字符串来处理,使用类似 natsort() 的自然排序
    • SORT_FLAG_CASE 可以结合(按位或)SORT_STRING 或 SORT_NATURAL 对字符串进行排序,不区分大小写
  • array2 可选
  • arrayN 可选
    用法示例
// 默认升序排序
$color_names = ['red', 'green', 'blue', 'yellow', 'white', 'black'];
array_multisort($color_names);

// 对两个数组进行排序
$color_names = ['red', 'green', 'blue', 'yellow', 'white', 'black'];
$color_codes = ['ff0000', '00ff00', '0000ff', 'ffff00', 'ffffff', '000000'];
// $color_names 按默认升序排序
// $color_codes 按和$color_names原索引一致的方式排序
// 如果两个参数调换位置,则排序结果不同
array_multisort($color_names, $color_codes);

通过指定列对二维(多维)数组进行排序

  1. 使用 array_column() 方法提取出需要排序的列的值;
  2. 使用 array_multisort() 方法进行排序;

使用示例

// 需要排序的二维数组
$colors = [
	[
		'name' => 'red',
		'code' => 'ff0000'
	],
	[
		'name' => 'black',
		'code' => '000000'
	],
	[
		'name' => 'green',
		'code' => '00ff00'
	],
	[
		'name' => 'white',
		'code' => 'ffffff'
	],
	[
		'name' => 'blue',
		'code' => '0000ff'
	]
];

// 提取code列的值
$color_codes = array_column($colors, 'code');
// 按code列的值降序排序
array_multisort($color_codes, SORT_DESC, $colors);

// 输出结果
array (size=5)
  0 => 
    array (size=2)
      'name' => string 'white' (length=5)
      'code' => string 'ffffff' (length=6)
  1 => 
    array (size=2)
      'name' => string 'red' (length=3)
      'code' => string 'ff0000' (length=6)
  2 => 
    array (size=2)
      'name' => string 'green' (length=5)
      'code' => string '00ff00' (length=6)
  3 => 
    array (size=2)
      'name' => string 'blue' (length=4)
      'code' => string '0000ff' (length=6)
  4 => 
    array (size=2)
      'name' => string 'black' (length=5)
      'code' => string '000000' (length=6)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值