0

我在数组中有一个数组,例如:

[ 
    [0, 20, 5], 
    [5, 0, 15], 
    [5, 10, 0]
]

我需要获得每列中的最大数量。

  • 的最大值[0 , 5 , 5]5,所以它进入结果数组。
  • 的最大值[20, 0, 10]20,所以它进入结果数组。
  • 的最大值[5, 15, 0]15,所以它进入结果数组。

最终结果数组必须包含[5, 20, 15].

4

2 回答 2

4

首先,必须转置数组(翻转行和列):

function array_transpose($arr) {
   $map_args = array_merge(array(NULL), $arr);
   return call_user_func_array('array_map', $map_args);
}

(取自Is there better way to transpose a PHP 2D array? - 阅读该问题以了解其工作原理)

然后,您可以将max函数映射到新数组上:

$maxes = array_map('max', array_transpose($arr));

示例:http ://codepad.org/3gPExrhO

输出 [我认为这是您的意思,而不是 (5, 15, 20),因为您说索引 1 应该是 (20, 0, 10) 的最大值]:

Array
(
    [0] => 5
    [1] => 20
    [2] => 15
)
于 2012-11-08T19:41:17.813 回答
0

如果没有 splat 运算符,array_map()withmax()将返回每行的最大值。( [20, 15, 10])

使用 splat 运算符转置数据结构,返回每列的最大值。

代码:(演示

$array = [ 
    [0, 20, 5], 
    [5, 0, 15], 
    [5, 10, 0]
];

var_export(
    array_map('max', ...$array)
);

输出:

array (
  0 => 5,
  1 => 20,
  2 => 15,
)
于 2021-08-29T17:43:51.533 回答