在多维数组php中获取每列的最大值和最小值

时间:2016-03-16 04:20:56

标签: php arrays multidimensional-array

我有一个多维数组

$array1 = array(
    0 => array(34554, 45, 4545454),
    1 => array(434534, 35, 345345),
    2 => array(43534, 35, 4343445),
    3 => array(35534, 34, 342323)
);

我们能找到每个值的最小值和最大值吗?如果我们想要找到第一列和第二列的min,则另一列是max,结果数组是

$array2 = array(
    0=>34554,
    1=>34,
    2=>4545454
);

我试过这个以获得分钟

$result = array(); // save result
array_walk_recursive($ary, function($v, $k) use (&$result) { 
    if (!isset($result[$k])) $result[$k] = $v;
    elseif ($result[$k] > $v) $result[$k] = $v;
});

print_r ($result);

并试图获得最大值

$result = array(); // save result
array_walk_recursive($ary, function($v, $k) use (&$result) { 
    if (!isset($result[$k])) $result[$k] = $v;
    elseif ($result[$k] < $v) $result[$k] = $v;
});
print_r ($result);

谢谢。

2 个答案:

答案 0 :(得分:0)

尝试以下解决方案:

$array1 = array(
    0 => array(34554, 45, 4545454),
    1 => array(434534, 35, 345345),
    2 => array(43534, 35, 4343445),
    3 => array(35534, 34, 342323)

);

//max values
$max_arr = array_map(function ($val) {
    return max($val);
}, $array1);
print_r($max_arr);

//min values
$min_arr = array_map(function ($val) {
    return min($val);
}, $array1);
print_r($min_arr);

//min and max values
$min_max_arr = array_map(function ($val) {
    return array('min' => min($val), 'max' => max($val));
}, $array1);

print_r($min_max_arr);

<强>输出:

//max values
Array
(
    [0] => 4545454
    [1] => 434534
    [2] => 4343445
    [3] => 342323
)

//min values
Array
(
    [0] => 45
    [1] => 35
    [2] => 35
    [3] => 34
)

//min and max values
Array
(
    [0] => Array
        (
            [min] => 45
            [max] => 4545454
        )

    [1] => Array
        (
            [min] => 35
            [max] => 434534
        )

    [2] => Array
        (
            [min] => 35
            [max] => 4343445
        )

    [3] => Array
        (
            [min] => 34
            [max] => 342323
        )

)

答案 1 :(得分:0)

我添加了一些元素,以便你可以注意到它是如何工作的,我已经将max min安排为键和值对,如果你要编辑你的问题并告诉我你想要的输出,我会更新它。 / p>

<?php
$array1 = array(
    0 => array(34554, 45, 4545454),
    1 => array(434534, 35, 345345),
    2 => array(43534, 35, 4343445),
    3 => array(9355434, 34, 342323),
    4 => array(35534, 34, 342323),
    5 => array(8544534, 34, 342323),
    6 => array(35534, 34, 342323)
);

foreach($array1 as $arr1){
    $max = max($arr1);
    $arr[$max] = min($arr1);
}
var_dump($arr);

输出

array (size=6)
  4545454 => int 45
  434534 => int 35
  4343445 => int 35
  9355434 => int 34
  342323 => int 34
  8544534 => int 34