如何筛选含模块及版本的数据行,保留每个唯一模块的最高版本
实现方案
核心逻辑
- 遍历所有模块条目,以
name为临时键缓存条目 - 用PHP内置的
version_compare函数对比版本,保留同名称下的最高版本 - 最后将缓存的关联数组转成数字索引数组即可
完整代码
// 原始数组 $original = [ 'vendor' => [ ['name' => 'module-one', 'version' => '1.7.0'], ['name' => 'module-one', 'version' => '1.8.0'], ['name' => 'module-two', 'version' => '1.8.0'], ['name' => 'module-two', 'version' => '1.2.0'], ['name' => 'module-three', 'version' => '1.9.0'], ['name' => 'module-three', 'version' => '1.8.0'], ] ]; // 处理逻辑 $temp = []; foreach ($original['vendor'] as $item) { $name = $item['name']; // 同名称下仅保留最高版本 if (!isset($temp[$name]) || version_compare($item['version'], $temp[$name]['version'], '>')) { $temp[$name] = $item; } } // 重置为数字索引得到最终结果 $result = [ 'vendor' => array_values($temp) ]; // 打印验证结果 print_r($result);
输出验证
运行上述代码后输出结果和需求完全一致:
Array ( [vendor] => Array ( [0] => Array ( [name] => module-one [version] => 1.8.0 ) [1] => Array ( [name] => module-two [version] => 1.8.0 ) [2] => Array ( [name] => module-three [version] => 1.9.0 ) ) )
内容的提问来源于stack exchange,提问作者Moneef
相关产品推荐
相关产品推荐

