对于二维数组排序,可以array_column和array_multisort合起来用。
用array_column提取出某一列的值。用array_multisort进行综合排序。
以下是解释二个函数。
(PHP 5 >= 5.5.0, PHP 7, PHP 8)
array_column — 返回输入数组中指定列的值
array_column(array $array, int|string|null $column_key, int|string|null $index_key = null): array
array_column() 返回 array
中键名为 column_key
的一列值。 如果指定了可选参数 index_key
,则使用输入数组中 index_key
列的值将作为返回数组中对应值的键。
array
多维数组或对象数组,从中提取一列值。 如果提供的是对象数组,只有 public 的属性会被直接取出。 如果想取出 private 和 protected 的属性,类必须实现 __get() 和 __isset() 魔术方法。
column_key
需要返回值的列。它可以是索引数组的列索引,或者是关联数组的列的键,也可以是属性名。 也可以是 null
,此时将返回整个数组(配合 index_key
参数来重新索引数组时非常好用)。
index_key
作为返回数组的索引/键的列。它可以是该列的整数索引,或者字符串键值。 该值会像数组键一样被 强制转换 (但是,在 PHP 8.0.0 之前,也被允许支持转换为字符串对象)。
返回输入数组中单列值的数组。
2135,
'first_name' => 'John',
'last_name' => 'Doe',
),
array(
'id' => 3245,
'first_name' => 'Sally',
'last_name' => 'Smith',
),
array(
'id' => 5342,
'first_name' => 'Jane',
'last_name' => 'Jones',
),
array(
'id' => 5623,
'first_name' => 'Peter',
'last_name' => 'Doe',
)
);
$first_names = array_column($records, 'first_name');
print_r($first_names);
?>
输出
Array
(
[0] => John
[1] => Sally
[2] => Jane
[3] => Peter
)
示例 #2 从结果集中总取出 last_name 列,用相应的“id”作为键值
输出:
Array
(
[2135] => Doe
[3245] => Smith
[5342] => Jones
[5623] => Doe
)
(PHP 4, PHP 5, PHP 7, PHP 8)
array_multisort — 对多个数组或多维数组进行排序
array_multisort(
array &$array1
,
mixed $array1_sort_order
= SORT_ASC,
mixed $array1_sort_flags
= SORT_REGULAR,
mixed $...
= ?
): bool
array_multisort() 可以用来一次对多个数组进行排序,或者根据某一维或多维对多维数组进行排序。
关联(string)键名保持不变,但数字键名会被重新索引。
注意:
如果两个成员完全相同,那么它们在排序数组中的相对顺序是未定义的。
array1
要排序的 array。
array1_sort_order
之前 array 参数要排列的顺序。 SORT_ASC
按照上升顺序排序, SORT_DESC
按照下降顺序排序。
此参数可以和 array1_sort_flags
互换,也可以完全删除,默认是 SORT_ASC
。
array1_sort_flags
为 array 参数设定选项:
排序类型标志:
SORT_REGULAR
- 将项目按照通常方法比较(不修改类型)SORT_NUMERIC
- 按照数字大小比较SORT_STRING
- 按照字符串比较SORT_LOCALE_STRING
- 根据当前的本地化设置,按照字符串比较。 它会使用 locale 信息,可以通过 setlocale() 修改此信息。SORT_NATURAL
- 以字符串的"自然排序",类似 natsort()SORT_FLAG_CASE
- 可以组合 (按位或 OR) SORT_STRING
或者 SORT_NATURAL
大小写不敏感的方式排序字符串。参数可以和 array1_sort_order
交换或者省略,默认情况下是 SORT_REGULAR
。
...
可选的选项,可提供更多数组,跟随在 sort order 和 sort flag 之后。 提供的数组和之前的数组要有相同数量的元素。 换言之,排序是按字典顺序排列的。
成功时返回 true
, 或者在失败时返回 false
。
数据全都存放在名为 data 的数组中。这通常是通过循环从数据库取得的结果,例如 mysql_fetch_assoc()。
67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
?>
本例中将把 volume 降序排列,把 edition 升序排列。
现在有了包含有行的数组,但是 array_multisort() 需要一个包含列的数组,因此用以下代码来取得列,然后排序。
$row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
// 将数据根据 volume 降序排列,根据 edition 升序排列
// 把 $data 作为最后一个参数,以通用键排序
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>
数据集合现在排好序了,结果如下:
volume | edition -------+-------- 98 | 2 86 | 1 86 | 6 85 | 6 67 | 2 67 | 7