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

如何使用usort与version_compare对多维数组按指定版本顺序排序?

使用usort结合version_compare对多维数组按版本排序

这其实很简单,我们可以通过usort()配合version_compare()来实现你想要的排序效果,正好匹配你期望的版本优先级:正式版 > 同版本高编号RC > 同版本低编号RC > 更低的正式版。下面是具体的实现步骤和代码示例:

代码实现

首先定义你的多维数组,然后通过自定义比较函数完成排序:

// 示例多维数组
$versions = [
    ['name' => '版本A', 'version' => '1.3'],
    ['name' => '版本B', 'version' => '1.3.2-RC1'],
    ['name' => '版本C', 'version' => '1.3.2'],
    ['name' => '版本D', 'version' => '1.3.1'],
    ['name' => '版本E', 'version' => '1.3.2-RC2'],
];

// 执行排序
usort($versions, function($a, $b) {
    // 利用version_compare的返回值,实现版本从高到低排序
    return version_compare($b['version'], $a['version']);
});

// 输出排序后的结果
print_r($versions);

代码说明

  • usort():这个函数会根据你提供的自定义回调函数,对数组进行原地排序(直接修改原数组),不需要额外赋值。
  • version_compare():PHP内置的版本号比较函数,能自动识别标准版本格式(包括正式版、RC版、beta版等)的优先级。它的返回规则是:
    • 如果第一个版本低于第二个,返回 -1
    • 如果两个版本相等,返回 0
    • 如果第一个版本高于第二个,返回 1
  • 排序逻辑:我们在回调函数中用$b['version']和$a['version']比较,这样当$b的版本更高时,返回1,usort会把$b排在$a前面,最终实现从高到低的排序,正好符合你要的顺序:1.3.2 → 1.3.2-RC2 → 1.3.2-RC1 → 1.3.1 → 1.3。

如果之后需要升序排序(从低到高),只需要把比较参数调换,改成return version_compare($a['version'], $b['version']);即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:11:02