#php #arrays
#php #массивы
Вопрос:
Я работаю над способом фильтрации двойных значений, поскольку мой пример ниже показывает, что в массиве присутствуют продукты, которые в основном двойные и должны быть объединены (создайте новый ключ с объединенными значениями).
Продукт должен быть объединен по api_id.
//old current array
[products] => Array
(
[product_5c7fb5f72f9d5_192] => Array
(
[record_id] => 84721
[api_id] => 192
[amount] => 12
[cost_price] => 3.36
)
[product_5c7fb5f72fe49_192] => Array
(
[record_id] => 84722
[api_id] => 177
[amount] => 1
[cost_price] => 1.09
)
[product_5c7fb5f7301b2_192] => Array
(
[record_id] => 84724
[api_id] => 192
[amount] => 24
[cost_price] => 6.72
)
[product_5c7fb5f7301b2_192] => Array
(
[record_id] => 84725
[api_id] => 192
[amount] => 24
[cost_price] => 6.72
)
)
// this should be new new array
[products] => Array
(
[product_5c7fb5f72f9d5_192] => Array
(
[record_id] => 84721
[api_id] => 192
[amount] => 60//new value
[cost_price] => 16.8//new value
)
[product_5c7fb5f72fe49_192] => Array
(
[record_id] => 84722
[api_id] => 177
[amount] => 1
[cost_price] => 1.09
)
)
Комментарии:
1. И в чем проблема? Вы что-нибудь пробовали?
Ответ №1:
Вы можете использовать array_reduce
:
$products = array_reduce($products, function ($carry, $product) {
if (!isset($carry[$product['api_id']])) {
$carry[$product['api_id']] = $product;
}
else {
$carry[$product['api_id']]['amount'] = $product['amount'];
$carry[$product['api_id']]['cost_price'] = $product['cost_price'];
}
return $carry;
}, []);
Комментарии:
1. хорошее решение, никогда не слышал о
array_reduce
раньше