如何使用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
相关产品推荐
相关产品推荐

