You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何对数组按元素值的最后一个字符排序

PHP 按数组元素值最后一个字符排序的实现方案

需求说明

给定一组字符串数组,需要按照每个元素字符串的最后一个字符的字典序完成排序,同时排序完成后数组的数字索引从0开始重新连续分配,不保留原有索引。

原始示例数组:

$string[0] = "They";
$string[1] = "started";
$string[2] = "plotting";
$string[3] = "against";
$string[4] = "him";

期望达成的排序效果:

$string[0] = "started";
$string[1] = "plotting";
$string[2] = "him";
$string[3] = "against";
$string[4] = "They";

实现代码

直接使用PHP内置的usort函数做自定义排序即可,这个函数的内置特性就是排序完成后会自动重置数组的数字索引,刚好匹配索引重写的要求。
排序的回调逻辑非常简单:提取两个待比较元素的最后一个字符,直接对两个字符做大小比对即可。

完整可运行的代码:

$string = [
    "They",
    "started",
    "plotting",
    "against",
    "him"
];

usort($string, function ($a, $b) {
    // 提取每个字符串的最后一个字符
    $lastCharA = substr($a, -1);
    $lastCharB = substr($b, -1);
    // 按字符字典序返回比较结果
    return $lastCharA <=> $lastCharB;
});

// 打印输出排序后的数组
print_r($string);

效果校验

对照每个元素的最后一个字符的字典顺序,就能验证逻辑的正确性:

  • started 最后一位字符是 d
  • plotting 最后一位字符是 g
  • him 最后一位字符是 m
  • against 最后一位字符是 t
  • They 最后一位字符是 y

字符顺序 d < g < m < t < y,和示例给出的期望结果完全一致。

实操注意点

  • 不要用uasort实现这个需求:该函数排序时会保留原数组的键值,无法实现索引重写的效果。
  • 代码里使用的太空船操作符<=>是PHP7.0及以上版本支持的语法,如果是更低版本的PHP环境,把比较部分替换为strcmp($lastCharA, $lastCharB)就能实现完全相同的效果。
  • 如果处理包含中文、特殊符号的多字节字符串,需要把substr替换为mb_substr并指定对应字符编码,避免截取最后字符时出现乱码,示例写法:
    $lastCharA = mb_substr($a, -1, 1, 'UTF-8');
    $lastCharB = mb_substr($b, -1, 1, 'UTF-8');
    
  • 如果需要做反向排序,只需要在回调里把两个比较值的位置调换即可。

内容的提问来源于stack exchange,提问作者Shalu Awzme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 07:54:03