當前位置: 首頁> 最新文章列表> 如何高效使用PHP的array_multisort()函數進行多維數組排序?

如何高效使用PHP的array_multisort()函數進行多維數組排序?

gitbox 2025-09-08
<span><span><span class="hljs-meta">&lt;?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 &amp;$array1, array $array2 = [], array $... = [], int $sorting_order = SORT_ASC, int $sorting_flags = SORT_REGULAR): bool
 *
 * - &amp;$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> =&gt; </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">"name"</span></span><span> =&gt; </span><span><span class="hljs-string">"Alice"</span></span><span>, </span><span><span class="hljs-string">"score"</span></span><span> =&gt; </span><span><span class="hljs-number">85</span></span><span>],
    [</span><span><span class="hljs-string">"id"</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">"name"</span></span><span> =&gt; </span><span><span class="hljs-string">"Bob"</span></span><span>,   </span><span><span class="hljs-string">"score"</span></span><span> =&gt; </span><span><span class="hljs-number">92</span></span><span>],
    [</span><span><span class="hljs-string">"id"</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">"name"</span></span><span> =&gt; </span><span><span class="hljs-string">"Cindy"</span></span><span>, </span><span><span class="hljs-string">"score"</span></span><span> =&gt; </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] =&gt; Array
 *         (
 *             [id] =&gt; 1
 *             [name] =&gt; Bob
 *             [score] =&gt; 92
 *         )
 *
 *     [1] =&gt; Array
 *         (
 *             [id] =&gt; 3
 *             [name] =&gt; Alice
 *             [score] =&gt; 85
 *         )
 *
 *     [2] =&gt; Array
 *         (
 *             [id] =&gt; 2
 *             [name] =&gt; Cindy
 *             [score] =&gt; 78
 *         )
 * )
 *
 * 三、技巧與註意事項
 * 1. 使用 array_column() 輔助函數能快速提取排序列,避免循環。
 * 2. 可以同時指定多個排序條件,例如“先按成績,再按ID”。
 * 3. array_multisort() 會改變原數組的索引,若需要保留索引,可先通過 uasort() 實現。
 * 4. 在處理大規模數據時,array_multisort() 的性能要优于手工實現排序逻辑。
 *
 * 四、總結
 * array_multisort() 是處理多維數組排序的利器,特別適用於需要對結果集按照多個維度進行排序的場景。
 * 掌握其用法能够显著提升代码的简洁度和执行效率。
 */</span>
</span></span>