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

PHP按年份数值与字母顺序排序年份-车型数组求助

解决PHP数组按年份数值+字母顺序排序的问题

嘿,我来帮你搞定这个排序难题!你的数组元素是「年份+品牌+车型」的组合字符串,要实现按年份数值排序、年份相同则按字母顺序排列的需求,用PHP的自定义排序函数就能轻松解决。

具体实现方案

我们可以用uasort()(如果不需要保留原数组键名就用usort())配合自定义比较逻辑,先提取年份做数值比较,再处理同一年份的字母排序:

// 你的去重后数组
$vehicleArray = [
    0 => '2012 Jeep Liberty',
    7 => '2011 Jeep Liberty',
    12 => '2010 Jeep Liberty',
    15 => '2009 Jeep Liberty',
    18 => '2008 Jeep Liberty',
    22 => '2007 Jeep Liberty',
    26 => '2006 Jeep Liberty',
    33 => '2006 Jeep Wrangler',
    // 其他元素...
];

// 自定义排序逻辑
uasort($vehicleArray, function($itemA, $itemB) {
    // 提取年份并转为整数,确保数值比较而非字符串比较
    $yearA = (int) explode(' ', $itemA)[0];
    $yearB = (int) explode(' ', $itemB)[0];

    // 优先按年份排序:这里是降序(最新年份在前),要升序就改成 $yearA - $yearB
    if ($yearA !== $yearB) {
        return $yearB - $yearA;
    }

    // 年份相同时,按品牌+车型的字母顺序排序(不区分大小写)
    $modelA = substr($itemA, 5); // 去掉前面的「年份 」(4位年份+空格共5个字符)
    $modelB = substr($itemB, 5);
    return strcasecmp($modelA, $modelB);
});

// 输出结果
print_r($vehicleArray);

代码说明

  • 年份提取与比较:用explode()拆分字符串取第一个元素,转成整数避免字符串比较的坑(比如"2010"字符串比"2009"小,但数值上是更大的)。
  • 排序方向控制:年份比较部分,$yearB - $yearA是降序,换成$yearA - $yearB就是升序,按需调整。
  • 同年份字母排序:用strcasecmp()做不区分大小写的字母比较,确保"Jeep Liberty"和"jeep wrangler"也能正确排序,substr()用来去掉前面的年份部分,只比较品牌车型。
  • 键名保留:如果需要保留原数组的键(比如你的[0]、[7]这些索引),就用uasort(),否则用usort()会重置索引为连续数字。

内容的提问来源于stack exchange,提问作者Brian Bruman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:53:39