當前位置: 首頁> 最新文章列表> 如何用rsort 按字符串長度給數組排序? PHP 中應該怎麼寫?

如何用rsort 按字符串長度給數組排序? PHP 中應該怎麼寫?

gitbox 2025-09-11

在PHP 中, rsort()函數通常用於對數組進行降序排序,但它默認按照數組元素的值進行排序。如果我們想按照字符串的長度來排序數組, rsort()並不能直接實現這個需求。為了按照字符串長度對數組進行排序,我們可以結合使用usort()和自定義比較函數,或者在排序前先計算字符串的長度並進行處理。

本文將介紹如何用rsort()按字符串長度給數組排序,並且會給出代碼示例和講解。

使用rsort()結合strlen()按字符串長度降序排序

首先要理解的是, rsort()是無法直接根據字符串的長度來排序的,它是基於數組元素的值進行排序的。所以我們需要使用usort()來實現按字符串長度的排序。

不過, usort()本身是對數組進行升序排序,我們可以自定義一個比較函數,比較函數將根據字符串的長度進行比較,從而實現按照長度進行排序。我們也可以將排序方式設為降序,來達到與rsort()類似的效果。

示例代碼:

 <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-variable">$array</span></span><span> = [</span><span><span class="hljs-string">"apple"</span></span><span>, </span><span><span class="hljs-string">"banana"</span></span><span>, </span><span><span class="hljs-string">"kiwi"</span></span><span>, </span><span><span class="hljs-string">"grapes"</span></span><span>, </span><span><span class="hljs-string">"strawberry"</span></span><span>];

</span><span><span class="hljs-comment">// 自定義比較函數,按字符串長度排序</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">compareByLength</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$a</span></span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$b</span></span><span>) - </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$a</span></span><span>);  </span><span><span class="hljs-comment">// 按降序排序</span></span><span>
}

</span><span><span class="hljs-comment">// 使用 usort 和自定義比較函數排序</span></span><span>
</span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>, </span><span><span class="hljs-string">'compareByLength'</span></span><span>);

</span><span><span class="hljs-comment">// 輸出排序後的數組</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

代碼解析:

  1. 定義數組:首先我們定義了一個包含不同水果名稱的數組$array ,這個數組中包含不同長度的字符串。

  2. 自定義比較函數compareByLength()是自定義的比較函數,它的作用是比較兩個字符串的長度。在這裡,我們使用strlen($b) - strlen($a)來實現按長度降序排序。 strlen()函數會返回字符串的長度, $b$a分別是兩個要比較的字符串,返回值為正數時表示$b的長度大於$a ,反之為負數。

  3. 排序數組usort()函數用於對數組進行排序,排序的規則由我們傳入的比較函數compareByLength來決定。

  4. 輸出排序結果:最後,使用print_r()輸出排序後的數組,結果將會按字符串長度從長到短排列。

排序結果:

執行上述代碼後,輸出結果將會是:

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">0</span></span><span>] =&gt; strawberry
    [</span><span><span class="hljs-number">1</span></span><span>] =&gt; banana
    [</span><span><span class="hljs-number">2</span></span><span>] =&gt; grapes
    [</span><span><span class="hljs-number">3</span></span><span>] =&gt; apple
    [</span><span><span class="hljs-number">4</span></span><span>] =&gt; kiwi
)
</span></span>

如你所見,字符串長度長的元素排在前面。

總結

雖然rsort()本身不能直接按字符串長度排序,但我們可以通過自定義比較函數配合usort()來實現這一需求。通過比較函數中的strlen()來計算字符串的長度,從而按長度對數組進行排序。這種方法不僅能保持rsort()的降序排列效果,還能夠靈活地根據需求對數組元素進行排序。

希望這個方法能幫助你在PHP 中更好地操作數組!