Как извлечь максимальное значение из подмассива и сохранить ключи родительского массива?

У меня есть следующий массив:

Array
(
[0] => Array
(
[0] => 2000
[1] => 401
)

[1] => Array
(
[0] => 2000
[1] => 317
)

[2] => Array
(
[0] => 2000
[1] => 301
)

[3] => Array
(
[0] => 2002
[1] => 285
)

[4] => Array
(
[0] => 2002
[1] => 277
)

[5] => Array
(
[0] => 2002
[1] => 271
)

[6] => Array
(
[0] => 2001
[1] => 208
)

[7] => Array
(
[0] => 2001
[1] => 263
)

[8] => Array
(
[0] => 2001
[1] => 262
)

[9] => Array
(
[0] => 2000
[1] => 258
)
)

Затем я написал следующий код для группировки его значения:

$result06 = array();

foreach ($chart06 as $el) {

if (!array_key_exists($el[0], $result06)) {

$result06[$el[0]] = array();

}

$result06[$el[0]][] = $el[1];

}

При этом мы получаем следующий результат:

Array
(
[2000] => Array
(
[0] => 401
[1] => 317
[2] => 301
[3] => 258
)

[2002] => Array
(
[0] => 285
[1] => 277
[2] => 271
)

[2001] => Array
(
[0] => 208
[1] => 263
[2] => 262
)
)

Теперь, как я могу извлечь максимальное значение каждого подмассива и преобразовать его в «плоский» массив, как показано ниже?

Array
(
[2000] => 401
[2002] => 285
[2001] => 263
)

Я попробовал это:

foreach ($result06 as $value){
$resultMax[] = max($value);
}

но с этим результат:

Array
(
[0] => 401
[1] => 285
[2] => 263
)

Но мне действительно нужно, чтобы оригинальные ключи были такими же.

Буду признателен за любую помощь!

2

Решение

Вы можете получить ключ в foreach цикл как это:

foreach ($result06 as $key => $value){
$resultMax[$key] = max($value);
}
0

Другие решения

Вставьте максимум только в первую очередь:

foreach ($chart06 as $el) {
if (!array_key_exists($el[0], $result06)) {
$result06[$el[0]] = $el1;
} else {
$result06[$el[0]] = max($result06[$el[0]], $el[1]);
}
}
0

Пропустите промежуточный этап создания массива группировки:

$result06 = array();

foreach ($chart06 as $el) {
if (!isset($result06[$el[0]])) {
$result06[$el[0]] = 0;
}
$result06[$el[0]] += el[1];
}
0

Я согласен с AbraCadaver, вы определенно можете вырезать средний шаг группировки значений по идентификатору.

Вам просто нужно перебрать исходный входной массив и определить:

  1. если каждое подмножество содержит первое вхождение «идентификатора» (первое значение в строке) ИЛИ
  2. если это не первое вхождение, проверьте, не превышает ли оно ранее сохраненное значение.

Код: (демонстрация)

$array = [
[2000, 401],
[2000, 317],
[2000, 301],
[2002, 285],
[2002, 277],
[2002, 271],
[2001, 208],
[2001, 263],
[2002, 285],
[2001, 262],
[2000, 258]
];

foreach ($array as $row) {
$id = $row[0];                                          // just to improve readability
if (!isset($result[$id]) ||  $result[$id] < $row[1]) {  // first occurrence or less than current
$result[$id] = $row[1];                             // store the current value
}
}

var_export($result);

Выход:

array (
2000 => 401,
2002 => 285,
2001 => 263,
)
0
По вопросам рекламы [email protected]