PHP使用高阶函数array_reduce查找数组最小值失败,求原因解析
问题分析与解决
你的代码逻辑本身是正确的,理论上应该输出180和1。出现仅输出180的情况,可能是以下几个原因:
- 函数定义顺序错误:如果你的实际代码中
minNumber函数定义在array_reduce调用之后,PHP执行到第二个array_reduce时会因找不到函数而抛出致命错误,脚本终止,导致第二个结果无法输出。必须确保函数定义在调用语句之前。 - 函数逻辑笔误:可能你实际编写的
minNumber函数中,比较符号写错了(比如把<写成了>),这样该函数会和maxNumber一样返回最大值180,如果浏览器中换行标签未生效,两个180连在一起会让你误以为只输出了一次。 - 换行标签问题:你使用的
</br>是错误的HTML换行标签,正确的应该是<br>或<br/>。错误的标签可能被浏览器忽略,导致第二个结果1紧跟在180后面,看起来像是1801,让你误以为只输出了180。 - 数组元素不符:如果你的实际数组中没有
1这个元素,minNumber会返回数组第一个元素5,同样可能因换行问题被忽略。
修正方案
- 确保函数定义在调用之前,保持你当前的代码结构即可。
- 修正
minNumber函数的逻辑(如果存在笔误),确保是取较小值:
function minNumber($acc, $val) { return $acc < $val ? $acc : $val; }
- 推荐给
array_reduce添加初始值,避免依赖数组第一个元素作为初始累积值,让逻辑更严谨:
// 找最大值时初始值设为最小整数 echo array_reduce($nums, "maxNumber", PHP_INT_MIN); echo "<br/>"; // 找最小值时初始值设为最大整数 echo array_reduce($nums, "minNumber", PHP_INT_MAX);
内容的提问来源于stack exchange,提问作者Naif Al-Mutairi
相关产品推荐
相关产品推荐

