【问题标题】:Get Array of Multiple Maximum Key vs Values from a multidimensional array从多维数组中获取多个最大键与值的数组
【发布时间】:2021-01-14 23:09:23
【问题描述】:

我有一个多维数组如下:

$data = ['data' => [
     'tree1' => ['fruits' => 20],
     'tree2' => ['fruits' => 15],
     'tree3' => ['fruits' => 20],
     'tree4' => ['fruits' => 17]
]];

如何获得具有最大fruits 值的数组,其键和值如下:

array(
    'tree1' => 20,
    'tree3' => 20,
)

目前我正在使用自定义循环和If Else 语句提取此数组。

有没有更好的方法来使用 PHP 提取这样的数组?

【问题讨论】:

    标签: php arrays multidimensional-array


    【解决方案1】:

    一种方法是计算最大fruits 值(这可以使用array_column 来提取值)然后遍历数组,当水果为最大值时推送键/水果对:

    $data = ['data' => [
         'tree1' => ['fruits' => 20],
         'tree2' => ['fruits' => 15],
         'tree3' => ['fruits' => 20],
         'tree4' => ['fruits' => 17]
    ]];
    
    $max_fruit = max(array_column($data['data'], 'fruits'));
    
    $output = array();
    foreach ($data['data'] as $key => $value) {
        if ($value['fruits'] == $max_fruit) {
            $output[$key] = $max_fruit;
        }
    }
    print_r($output);
    

    输出

    Array
    (
        [tree1] => 20
        [tree3] => 20
    )
    

    Demo on 3v4l.org

    对于$data 具有多组具有不同键的树数据的情况,您需要遍历每组数据,首先生成$max_fruit 值(array_map 对此很有用),然后使用嵌套的foreach 来获取匹配值:

    $data = ['data1' => [
         'tree1' => ['fruits' => 20],
         'tree2' => ['fruits' => 15],
         'tree3' => ['fruits' => 20],
         'tree4' => ['fruits' => 17]
    ],
    'data2' => [
         'tree5' => ['fruits' => 20],
         'tree6' => ['fruits' => 11],
         'tree7' => ['fruits' => 13],
         'tree8' => ['fruits' => 17]
    ]];
    
    $max_fruit = max(array_map(function ($d) { return max(array_column($d, 'fruits')); }, $data));
    
    $output = array();
    foreach ($data as $set) {
        foreach ($set as $key => $value) {
            if ($value['fruits'] == $max_fruit) {
                $output[$key] = $max_fruit;
            }
        }
    }
    print_r($output);
    

    在这种情况下,输出是:

    Array
    (
        [tree1] => 20
        [tree3] => 20
        [tree5] => 20
    )
    

    Demo on 3v4l.org

    【讨论】:

    • @LuFFy 不用担心 - 我很高兴能帮上忙
    • 我还有一个问题,如果不是data,如果结构是array('data1' => array, 'data2' => array)呢?
    • 那么$data 中有多个data 数组,其中都有树? $data 数组中是否还有其他值?
    • 是的,正确的@Nick,例如,我没有东西可以代替 XXXX:max(array_column($data[ XXXX ], 'fruits')
    • 酷。我已经更新了答案,这样任何看到问题但没有阅读 cmets 的人都会得到这两种解决方案。
    猜你喜欢
    • 2017-11-03
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2014-05-22
    • 2015-04-22
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    相关资源
    最近更新 更多