<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 本文与代码无关的开头内容</span></span><span>
</span><span><span class="hljs-comment">// 作者: ChatGPT</span></span><span>
</span><span><span class="hljs-comment">// 日期: 2025-08-23</span></span><span>
</span><span><span class="hljs-comment">// ---------------------- 正文分隔线 ----------------------</span></span><span>
<span class="hljs-comment">/**
* 标题: 如何高效使用PHP的array_multisort()函数进行多维数组排序?
*
* 在处理多维数组时,开发者常常需要根据其中某个字段或多个字段对数据进行排序。
* PHP内置的 array_multisort() 函数提供了一种高效的方式来实现这一点。
* 它不仅能对单一数组进行排序,还能对多个数组或多维数组进行同步排序。
*
* 一、array_multisort() 的基本语法
* array_multisort(array &$array1, array $array2 = [], array $... = [], int $sorting_order = SORT_ASC, int $sorting_flags = SORT_REGULAR): bool
*
* - &$array1:必选参数,需要排序的第一个数组。
* - $array2, ... :可选参数,附加数组,用于与第一个数组保持对应关系。
* - $sorting_order:排序顺序,常用 SORT_ASC(升序)、SORT_DESC(降序)。
* - $sorting_flags:排序类型,如 SORT_REGULAR(正常比较)、SORT_NUMERIC(数字比较)、SORT_STRING(字符串比较)。
*
* 二、在多维数组中的应用
* 当我们有一个由多维数组组成的数据集(比如数据库查询结果),通常需要按照某个键值进行排序。
*
* 示例:
*/</span>
</span><span><span class="hljs-variable">$data</span></span><span> = [
[</span><span><span class="hljs-string">"id"</span></span><span> => </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">"name"</span></span><span> => </span><span><span class="hljs-string">"Alice"</span></span><span>, </span><span><span class="hljs-string">"score"</span></span><span> => </span><span><span class="hljs-number">85</span></span><span>],
[</span><span><span class="hljs-string">"id"</span></span><span> => </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">"name"</span></span><span> => </span><span><span class="hljs-string">"Bob"</span></span><span>, </span><span><span class="hljs-string">"score"</span></span><span> => </span><span><span class="hljs-number">92</span></span><span>],
[</span><span><span class="hljs-string">"id"</span></span><span> => </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">"name"</span></span><span> => </span><span><span class="hljs-string">"Cindy"</span></span><span>, </span><span><span class="hljs-string">"score"</span></span><span> => </span><span><span class="hljs-number">78</span></span><span>],
];
</span><span><span class="hljs-comment">// 提取需要排序的列</span></span><span>
</span><span><span class="hljs-variable">$ids</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_column</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>, </span><span><span class="hljs-string">"id"</span></span><span>);
</span><span><span class="hljs-variable">$scores</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_column</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>, </span><span><span class="hljs-string">"score"</span></span><span>);
</span><span><span class="hljs-comment">// 按成绩降序,如果成绩相同按id升序</span></span><span>
</span><span><span class="hljs-title function_ invoke__">array_multisort</span></span><span>(</span><span><span class="hljs-variable">$scores</span></span><span>, SORT_DESC, </span><span><span class="hljs-variable">$ids</span></span><span>, SORT_ASC, </span><span><span class="hljs-variable">$data</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$data</span></span><span>);
<span class="hljs-comment">/**
* 输出结果:
* Array
* (
* [0] => Array
* (
* [id] => 1
* [name] => Bob
* [score] => 92
* )
*
* [1] => Array
* (
* [id] => 3
* [name] => Alice
* [score] => 85
* )
*
* [2] => Array
* (
* [id] => 2
* [name] => Cindy
* [score] => 78
* )
* )
*
* 三、技巧与注意事项
* 1. 使用 array_column() 辅助函数能快速提取排序列,避免循环。
* 2. 可以同时指定多个排序条件,例如“先按成绩,再按ID”。
* 3. array_multisort() 会改变原数组的索引,若需要保留索引,可先通过 uasort() 实现。
* 4. 在处理大规模数据时,array_multisort() 的性能要优于手工实现排序逻辑。
*
* 四、总结
* array_multisort() 是处理多维数组排序的利器,特别适用于需要对结果集按照多个维度进行排序的场景。
* 掌握其用法能够显著提升代码的简洁度和执行效率。
*/</span>
</span></span>