PHP如何获取二维数组按垂直方向(列)的每列最大值?
问题原因
你现有的代码是遍历每个用户的成绩数组,取每个用户自身所有成绩的最大值,属于横向统计逻辑,和你要的纵向同位置取最大值的需求不符。
实现方案
方案1:常规循环实现(可读性更高)
$max = []; // 取首个用户的成绩数量作为总列数,默认所有用户的成绩数量一致 $totalColumns = count(reset($scores)); for ($i = 0; $i < $totalColumns; $i++) { // 取出所有用户第i位的成绩 $currentColumn = array_column($scores, $i); $max[] = max($currentColumn); } var_dump($max); // 输出结果:[75, 80, 90, 90, 80, 80] // 你给出的预期输出少了最后一位的最大值80,属于笔误
方案2:函数式简洁写法
$max = array_map('max', ...array_values($scores));
实现原理:
- 先用
array_values把关联数组$scores转为索引数组,再通过可变参数语法...将五个用户的成绩数组作为多个参数传入array_map array_map会依次将每个参数数组的同位置元素传给回调函数max,直接得到每列的最大值
内容的提问来源于stack exchange,提问作者Yura
相关产品推荐
相关产品推荐

