當前位置: 首頁> 最新文章列表> rsort 和asort 在PHP 排序中有什麼區別?各自適合哪些場景?

rsort 和asort 在PHP 排序中有什麼區別?各自適合哪些場景?

gitbox 2025-07-01
<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-title function_ invoke__">str_repeat</span></span><span>(</span><span><span class="hljs-string">"-"</span></span><span>, </span><span><span class="hljs-number">50</span></span><span>) . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>

rsort 和 asort 在 PHP 排序中有什麼區別?各自適合哪些場景?

在 PHP 中,數組排序是非常常見的操作,而 rsort 和 asort 是兩個常用的排序函數。它們雖然都用於排序數組,但在排序方式和排序結果的保留上有明顯的區別。

</span><span><span class="hljs-number">1</span></span><span>. rsort — 倒序排序(降序排序)

</span><span><span class="hljs-title function_ invoke__">rsort</span></span><span>() 函數將數組按照值進行降序排序(從大到小),並且會重置數組的索引,索引會被重新分配為從 </span><span><span class="hljs-number">0</span></span><span> 開始的連續數字。

示例代碼:
```php
</span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">rsort</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span></span>

輸出結果:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">0</span></span><span>] =&gt; </span><span><span class="hljs-number">4</span></span><span>
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; </span><span><span class="hljs-number">3</span></span><span>
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; </span><span><span class="hljs-number">2</span></span><span>
    [</span><span><span class="hljs-meta">3</span></span><span>] =&gt; </span><span><span class="hljs-number">1</span></span><span>
)
</span></span>

注意,數組的原始鍵被丟棄,數組變成了索引數組。

適用場景:

  • 只關心數組元素的值排序,且不需要保留鍵名。

  • 例如對數字列表進行降序排列,展示排行榜、分數等。

  1. asort — 按值排序並保持鍵名關聯

asort() 函數按照值進行升序排序(從小到大),但是會保持數組的鍵名不變。即排序後數組的鍵值對關係仍然存在。

示例代碼:

 <span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-string">'d'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">asort</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span></span>

輸出結果:

 <span><span>Array
(
    [</span><span><span class="hljs-meta">b</span></span><span>] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [</span><span><span class="hljs-meta">d</span></span><span>] =&gt; </span><span><span class="hljs-number">2</span></span><span>
    [</span><span><span class="hljs-meta">a</span></span><span>] =&gt; </span><span><span class="hljs-number">3</span></span><span>
    [</span><span><span class="hljs-meta">c</span></span><span>] =&gt; </span><span><span class="hljs-number">4</span></span><span>
)
</span></span>

適用場景:

  • 需要根據值排序,同時保留鍵名的場景。

  • 例如按產品價格排序,但需要保留產品的標識ID。

  • 用於關聯數組排序,方便後續通過鍵訪問對應的值。

總結對比:

函數排序方向是否保留鍵名適合的場景
rsort降序不保留只需值排序,鍵名無關,如排行榜
asort升序保留鍵名保留鍵值關聯,如關聯數組排序

此外,PHP 還有arsort 用於降序排序並保持鍵名,sort 用於升序排序但不保持鍵名。根據不同需求,選擇合適的排序函數可以讓代碼更簡潔高效。

通過理解rsort 和asort 的差異,能更好地處理數組排序,避免數據錯亂,提升程序的可靠性與可讀性。

<?php // 尾部分隔線,和文章內容無關echo str_repeat("-", 50) . "\n"; ?>
 <span></span>