Требование, чтобы получить выходной массив, который содержит:
- Элементы с одной и той же «PLACEMENT_ID» имеет «» и запросы
revenue
суммированные.
- Ключевым элементом записи в выходном массиве будет «place_id».
Это означает, что выходной массив будет меньше, чем входной массив.
Я решил использовать функцию array_reduce. Нет особой причины, foreach
Петли работают нормально. Это не более эффективно. Это просто другое.
Важный момент о array_reduce
является то, что $carry
(аккумулятор) может быть array
...
Working example at Eval.in
Код:
$outArray = array();
$outArray = array_reduce($src,
function($carry, $item) { // accumulate values if possible
$carryKey = $item['placement_id']; // array key
if (isset($carry[$carryKey])) { // accumulate values
$carry[$carryKey]['requests'] += $item['requests'];
$carry[$carryKey]['revenue'] += $item['revenue'];
} else { // is new - add to the output...
$carry[$carryKey] = $item;
}
return $carry;
},
array() /* accumulator ($carry) is an internal variable */);
Выходной массив:
array (2) [
'1' => array (4) [
'date' => string (10) "2016-01-19"
'placement_id' => integer 1
'requests' => integer 20
'revenue' => float 1.2
]
'666' => array (4) [
'date' => string (10) "2016-04-01"
'placement_id' => integer 666
'requests' => integer 266
'revenue' => float 666.20000000000005
]
]
Испытание D ата:
$src = array(
0 => array(
"date" => "2016-01-19",
"placement_id" => 1,
"requests" => 18,
"revenue" => 1,
),
1 => array(
"date" => "2016-04-01",
"placement_id" => 666,
"requests" => 266,
"revenue" => 666.2,
),
2 => array(
"date" => "2016-01-19",
"placement_id" => 1,
"requests" => 2,
"revenue" => 0.2,
),
);
пожалуйста, поделитесь, что вы имеете вы пробовали – Tommy