通过查找每对密钥的最大值来组关联数组

问题描述 投票:1回答:3

我有这样的数组,数据来自对象

Array (
  Array(
   'year' => '2018',
   'data' => Array(
     'Essence' => [68,54,69,36,36,47,103,97,69,68,0,12],
     'Lalo'  => [68,54,69,36,36,47,03,45,63,68,0,12]
   )
  ),
  Array(
   'year' => '2015',
   'data' => Array(
     'Essence' => [68,54,69,36,36,47,03,97,69,68,0,12],
     'Lalo'  => [68,54,69,36,36,47,03,97,69,68,0,12],
     'Sahafa' => [62,02,0,4,7,65,26,97,62,35,36,31,16]
   )
  ),
  Array(
   'year' => '2015',
   'data' => Array(
     'Mika' => [02,03,06,01,10,17,13,17,17,17,10,12],
     'Simba'  => [08,04,09,46,26,27,34,70,09,04,07,21]
   ),
  )
);

全部,我想创建另一个分组键并设置同一年中找到的每个键的最大值。作为数组的关键

Array (
  '2018' => Array(
    'Essence' => 103, // max of all value of the key each 'Essence' key on 2019
    'Lalo'    => 69 //..
  ),
  // Data from 2015
  '2015' => Array(
    'Essence' => 97, 
    'Lalo'    => 64, //..
    'Mika' => 17, //..
    'Sahafa' => 65
    'Simba'  => 70 //..
  )
);
php arrays multidimensional-array
3个回答
1
投票

你将不得不多次应用max:一次从最内层系列中获得最大值,然后再次获得这些最大值的最大值,当它们大约在同一年和类型时。

假设输入在$data中,那么:

foreach ($data as $item) {
    foreach($item["data"] as $type => $series) {
        $result[$item["year"]][$type] = isset($result[$item["year"]][$type]) 
            ? max($result[$item["year"]][$type], max($series)) 
            : max($series);
    }
}

1
投票

代码开头:

$new_array = [];
foreach ($array as $item) {
    $year = $item['year'];
    if (!isset($new_array[$year])) {
        $new_array[$year] = [];
    }
    foreach ($item['data'] as $key => $value) {
        $new_array[$year][$key] = max($value);
    }
}

1
投票

这应该工作 -

$new = [];
foreach ($arr as $a) {
    foreach ($a['data'] as $key => $value) {
        // extract max value & set to keys accordingly
        $new[$a['year']][$key] = max($value);
    }
}

产量

array(2) {
  [2018]=>
  array(2) {
    ["Essence"]=>
    int(103)
    ["Lalo"]=>
    int(69)
  }
  [2015]=>
  array(5) {
    ["Essence"]=>
    int(97)
    ["Lalo"]=>
    int(97)
    ["Sahafa"]=>
    int(97)
    ["Mika"]=>
    int(17)
    ["Simba"]=>
    int(70)
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.