PHP获取多个数组中最高值的更优实现方法咨询
原代码存在的问题
- 三层嵌套foreach存在大量重复计算,性能极差,数组元素多的时候耗时会成倍增长
- 逻辑判断混乱,前两层循环的判断逻辑是取最小值,仅靠第三层的反向判断得到正确结果,逻辑可维护性极低
优化方案1:合并数组后取最大值(最常用,易维护)
核心思路是先把所有要统计的数组合并为一个大数组,直接调用PHP内置的max()函数获取最大值,代码如下:
<?php $marks1 = array(360,310,310,330,313,375,456,111,256); $marks2 = array(350,340,356,330,321); $marks3 = array(630,340,570,635,434,255,298); // 合并所有数组 $all_marks = array_merge($marks1, $marks2, $marks3); // 取数组最大值 $max_value = max($all_marks); echo $max_value."<br>"; ?>
优势:
- 逻辑直白,任何人都能快速看懂代码意图
- 内置函数经过官方底层优化,执行效率远高于手写循环
- 后续新增数组只需要在
array_merge中加参数即可,维护成本极低
优化方案2:分别取单个数组最大值再比较(适合需要单独统计各数组最大值的场景)
如果后续你需要单独拿到每个数组的最大值,不需要合并数组,直接嵌套调用max()即可:
<?php $marks1 = array(360,310,310,330,313,375,456,111,256); $marks2 = array(350,340,356,330,321); $marks3 = array(630,340,570,635,434,255,298); $max_value = max(max($marks1), max($marks2), max($marks3)); echo $max_value."<br>"; ?>
两种方案最终输出结果都是635,和你原代码运行结果完全一致
内容的提问来源于stack exchange,提问作者Osama Zubair
相关产品推荐
相关产品推荐

