我有这样的数组,数据来自对象
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 //..
)
);
你将不得不多次应用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);
}
}
代码开头:
$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);
}
}
这应该工作 -
$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)
}
}