當前位置: 首頁> 最新文章列表> 如何將krsort 函數與array_multisort 配合使用進行更複雜的排序?

如何將krsort 函數與array_multisort 配合使用進行更複雜的排序?

gitbox 2025-09-18
<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-keyword">echo</span></span><span> </span><span><span class="hljs-string">"歡迎閱讀本篇文章!&lt;br&gt;"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">date_default_timezone_set</span></span><span>(</span><span><span class="hljs-string">'Asia/Shanghai'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"當前時間:"</span></span><span> . </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">"Y-m-d H:i:s"</span></span><span>) . </span><span><span class="hljs-string">"&lt;br&gt;"</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

</span><span><span class="hljs-meta">&lt;?php</span></span><span>
<span class="hljs-comment">/*
標題: 如何將 krsort 函數與 array_multisort 配合使用進行更複雜的排序?

在 PHP 中,數組排序是常見的操作。krsort 和 array_multisort 是兩個功能強大的函數,但用途不同。本文將详细说明如何將它们結合使用,以實現更複雜的排序需求。
*/</span>

<span class="hljs-comment">/*
1. krsort 簡介
krsort 用於根據數組的鍵進行降序排序(從大到小)。語法如下:
krsort(array &amp;$array, int $sort_flags = SORT_REGULAR): bool

示例:
*/</span>
</span><span><span class="hljs-variable">$data</span></span><span> = [
    </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>,
    </span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>,
    </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>,
];
</span><span><span class="hljs-title function_ invoke__">krsort</span></span><span>(</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><span><span class="hljs-comment">// 輸出按鍵降序排列的數組 ['c'=&gt;3,'b'=&gt;2,'a'=&gt;1]</span></span><span>

<span class="hljs-comment">/*
2. array_multisort 簡介
array_multisort 可以對多個數組或多維數組進行聯合排序,非常適合複雜的排序需求。它不僅能按值排序,還能指定排序順序(升序/降序)和類型。
*/</span>

<span class="hljs-comment">/*
3. 將 krsort 與 array_multisort 配合使用
假設我們有一個多維數組,需要先按鍵降序排列,再按某個子元素的值升序排序,可以按以下步驟進行:
*/</span>
</span><span><span class="hljs-variable">$users</span></span><span> = [
    </span><span><span class="hljs-string">'user3'</span></span><span> =&gt; [</span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">25</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">88</span></span><span>],
    </span><span><span class="hljs-string">'user1'</span></span><span> =&gt; [</span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">30</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">'user2'</span></span><span> =&gt; [</span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">22</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">95</span></span><span>],
];

</span><span><span class="hljs-comment">// 第一步:按鍵降序</span></span><span>
</span><span><span class="hljs-title function_ invoke__">krsort</span></span><span>(</span><span><span class="hljs-variable">$users</span></span><span>);

</span><span><span class="hljs-comment">// 第二步:提取需要排序的列</span></span><span>
</span><span><span class="hljs-variable">$ages</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_column</span></span><span>(</span><span><span class="hljs-variable">$users</span></span><span>, </span><span><span class="hljs-string">'age'</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">$users</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span>);

</span><span><span class="hljs-comment">// 第三步:使用 array_multisort 進行多維排序</span></span><span>
</span><span><span class="hljs-title function_ invoke__">array_multisort</span></span><span>(</span><span><span class="hljs-variable">$ages</span></span><span>, SORT_ASC, </span><span><span class="hljs-variable">$scores</span></span><span>, SORT_DESC, </span><span><span class="hljs-variable">$users</span></span><span>);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$users</span></span><span>);

<span class="hljs-comment">/*
結果解釋:
1. 首先通過 krsort 按鍵降序排列用户。
2. 然後使用 array_multisort 對用戶的年齡升序排列,如果年齡相同,則按分數降序排列。
3. 最終得到的 $users 数组既保持了按鍵降序的初始顺序,又實現了按值的複雜排序。

4. 小技巧
- 當數組較大時,先用 krsort 對鍵排序,再用 array_multisort 對值排序,可以保證排序邏輯清晰。
- array_multisort 支持多列排序,使用 array_column 提取對應列最為方便。
- 如果數組是關聯數組,記得先 krsort 再用 array_multisort 重新索引,以避免鍵值錯亂。
*/</span>

<span class="hljs-comment">/*
總結:
將 krsort 與 array_multisort 結合使用,可以實現複雜的多維數組排序需求。krsort 負責按鍵的降序排序,array_multisort 則可以針對數組的值進行多條件、多類型排序。這種組合方法既靈活又高效,適用於各種實際應用場景,例如用戶數據管理、報表排序等。
*/</span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>