当前位置: 首页> 最新文章列表> 如何用 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 中更好地操作数组!