php数组中每个键值的最大值

时间:2014-02-04 14:01:03

标签: php

我想找出数组中每个键的最大值

$arr1= array(
    0=>array(1,2,3),
    1=>array(2,4,6),
    2=>array(25,4,5));
}

我想找到相应密钥的每个值的最大值 最后的输出是

$max_array = array(25,4,6);

使用以下代码我得到错误max():当只给出一个参数时,它必须是

中的数组
foreach ($res_arr as $k=>$subArray) {
    foreach ($subArray as $id=>$value) {
        $spanmaxArray[$id] = max($value);
    }
}

5 个答案:

答案 0 :(得分:4)

首先,旋转数组使列成为行

$arr1= array(
    0=>array(1,2,3),
    1=>array(2,4,6),
    2=>array(25,4,5)
);

$arr2 = array();

foreach($arr1 as $subArray) {
    foreach($subArray as $k=>$v) {
        $arr2[$k][] = $v;
    }
}

然后,使用array_map作为@HamZa

$max_array  = array_map('max', $arr2);
print_r($max_array);

答案 1 :(得分:2)

绝对是最短的版本:

$max_array = array_map('max', $arr1);

array_map()接受$ arr1的每个元素数组并对其应用max()。

在看到每个列位置的最大值后编辑:

$sorted = array();
for ($i = 0; $i <=2; $i++) { 
    $sorted[$i] = array_column($input, $i);
}

这循环遍历数组并将array_column()应用于每个(需要PHP 5.5)。

所以:

$sorted = array();
for ($i = 0; $i <=2; $i++) { 
    $sorted[$i] = array_column($arr1, $i);
}
$max_array = array_map('max', $sorted);

working version

答案 2 :(得分:1)

foreach ($res_arr as $k=>$subArray){
        $max = 0;
        foreach ($subArray as $id=>$value){
            if ($value>$max){
                $max = $value;
            }
        }
        $spanmaxArray[$k] = $max;
}

试试这个。

答案 3 :(得分:0)

您只需要一个循环,因为max函数将数组作为参数。但你给出的答案是错误的,除非我误解了这个问题。

我认为你所追求的是:

$max_array = array_map('max', $arr1);

答案 4 :(得分:0)

所有先前的答案都太努力了。

  • 使用array_map()作为迭代函数。
  • 使用“ spread / splat运算符”(...)打开多维数组的包装;换句话说,将包含三个子数组的单个数组转换为三个单独的数组。
  • max()同步迭代的三个元素上调用array_map()

代码:(Demo

$arr1 = [
    [1, 2, 3],
    [2, 4, 6],
    [25, 4, 5],
];

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

以上是以下单行代码的一种更加通用和简洁的版本,它对示例数组具有相同的作用:

var_export(array_map('max', $arr1[0], $arr1[1], $arr1[2]));

输出:

array (
  0 => 25,
  1 => 4,
  2 => 6,
)

*给研究人员的注释:如果处理具有关联的第一级键的多维数组,则将需要索引第一级,以使splat运算符不会阻塞键。

...array_values($array)