PHP数组相同Module键值时筛选Version最高项的实现方法咨询
问题分析
你原有代码存在以下问题:
- 索引使用错误,
$i、$j两个变量的取值逻辑完全不符合数组结构,会触发取值报错 - 缺失版本号对比逻辑,仅判断了Module是否重复,没有保留最高版本的处理规则
- 循环末尾强制覆盖了Module字段的值,之前的判断逻辑完全失效
正确实现
核心逻辑是用Module名称作为临时数组的键,遍历过程中仅保留同Module下版本最高的条目,最终重置数组索引即可得到目标结果:
$modulesFiltered = []; foreach ($modules as $module) { $modName = $module['Module']; $modVer = $module['Version']; // 未记录过该模块直接存入 if (!isset($modulesFiltered[$modName])) { $modulesFiltered[$modName] = $module; continue; } // 已记录则对比版本,当前版本更高就替换 if (version_compare($modVer, $modulesFiltered[$modName]['Version']) > 0) { $modulesFiltered[$modName] = $module; } } // 重置为数字索引数组,匹配预期输出格式 $modulesFiltered = array_values($modulesFiltered);
说明
这里使用PHP内置的version_compare函数做版本对比,相比直接字符串比较更严谨,能正确识别1.10 > 1.2这类版本号大小关系。
内容的提问来源于stack exchange,提问作者TeaAt5
相关产品推荐
相关产品推荐

