ZetCode

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

排序两个并行数组

本示例演示了如何对两个数组进行排序,其中一个数组充当排序键。

parallel_arrays.php
<?php

$names = ["Tom", "Alice", "Bob"];
$ages = [25, 22, 30];

array_multisort($ages, SORT_ASC, $names);

print_r($names); 
print_r($ages);  

在这里,我们按升序对两个数组(年龄)进行排序。$names 数组会根据已排序的 $ages 数组的顺序进行重新排列。

排序多维数组

按其中一列对多维数组进行排序,同时保持结构。

multidimensional_array.php
<?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 数组按年龄排序。我们首先提取年龄列,然后将其用作主数组的排序键。

按多列排序

按多个列和不同的排序顺序对多维数组进行排序。

multiple_columns.php
<?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 标志不区分大小写地排序字符串数组。

case_insensitive.php
<?php

$fruits = ["apple", "Orange", "banana", "PEAR"];
array_multisort($fruits, SORT_ASC, SORT_FLAG_CASE | SORT_STRING);

print_r($fruits); 

SORT_FLAG_CASE 标志使排序不区分大小写。如果没有它,大写字母将排在小写字母之前。

自然排序

使用 SORT_NATURAL 按人类的自然顺序对包含数字的字符串进行排序。

natural_sort.php
<?php

$versions = ["version1", "version10", "version2", "version20"];
array_multisort($versions, SORT_ASC, SORT_NATURAL);

print_r($versions); 

自然排序将字符串的数字部分视为数字而不是文本。这为版本号或文件名提供了更直观的结果。

最佳实践

来源

PHP array_multisort 文档

本教程介绍了 PHP array_multisort 函数,并提供了实际示例,展示了它在各种排序场景中的用法。

作者

我的名字是 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。至今,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 PHP 数组函数