PHP array_multisort 函数
最后修改于 2025 年 3 月 13 日
PHP array_multisort
函数可以根据一个或多个维度对多个数组或多维数组进行排序。它在复杂的排序场景中非常强大。
基本定义
array_multisort
可以同时对几个数组进行排序,或者根据一个或多个列对多维数组进行排序。它会保持索引关联。
语法: array_multisort(array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]]): bool
。
排序两个并行数组
本示例演示了如何对两个数组进行排序,其中一个数组充当排序键。
<?php $names = ["Tom", "Alice", "Bob"]; $ages = [25, 22, 30]; array_multisort($ages, SORT_ASC, $names); print_r($names); print_r($ages);
在这里,我们按升序对两个数组(年龄)进行排序。$names
数组会根据已排序的 $ages
数组的顺序进行重新排列。
排序多维数组
按其中一列对多维数组进行排序,同时保持结构。
<?php $users = [ ["name" => "Tom", "age" => 25], ["name" => "Alice", "age" => 22], ["name" => "Bob", "age" => 30] ]; $ages = array_column($users, 'age'); array_multisort($ages, SORT_ASC, $users); print_r($users);
这会按升序对 $users
数组按年龄排序。我们首先提取年龄列,然后将其用作主数组的排序键。
按多列排序
按多个列和不同的排序顺序对多维数组进行排序。
<?php $products = [ ["name" => "Laptop", "price" => 999, "stock" => 5], ["name" => "Phone", "price" => 699, "stock" => 10], ["name" => "Tablet", "price" => 399, "stock" => 8], ["name" => "Monitor", "price" => 199, "stock" => 3] ]; $prices = array_column($products, 'price'); $stocks = array_column($products, 'stock'); array_multisort( $prices, SORT_ASC, $stocks, SORT_DESC, $products ); print_r($products);
这将按价格升序对产品进行排序,然后按库存降序对产品进行排序。主要排序是基于价格,库存用于打破价格相等的平局。
不区分大小写的字符串排序
使用 SORT_FLAG_CASE
标志不区分大小写地排序字符串数组。
<?php $fruits = ["apple", "Orange", "banana", "PEAR"]; array_multisort($fruits, SORT_ASC, SORT_FLAG_CASE | SORT_STRING); print_r($fruits);
SORT_FLAG_CASE
标志使排序不区分大小写。如果没有它,大写字母将排在小写字母之前。
自然排序
使用 SORT_NATURAL
按人类的自然顺序对包含数字的字符串进行排序。
<?php $versions = ["version1", "version10", "version2", "version20"]; array_multisort($versions, SORT_ASC, SORT_NATURAL); print_r($versions);
自然排序将字符串的数字部分视为数字而不是文本。这为版本号或文件名提供了更直观的结果。
最佳实践
- 引用参数: 请记住数组是按引用传递的。
- 列提取: 对于多维数组,请使用 array_column()。
- 标志组合: 组合标志,如 SORT_NATURAL | SORT_FLAG_CASE。
- 错误处理: 检查返回值,因为它返回 bool。
- 内存: 对于大型数组要小心,因为它会就地排序。
来源
本教程介绍了 PHP array_multisort
函数,并提供了实际示例,展示了它在各种排序场景中的用法。
作者
列出 所有 PHP 数组函数。