@daylight6

Как собрать новый массив из массивов в цикле по совпадению «ключ» — «значение»?

Есть массив
array(2) {
  ["Moscow"] =>
    [0] =>
        ["PRODUCT_ID"] => 10
        ["PRICE_USD"] => 300
        ["PRICE_RUB"] => 12000
    [1]=>
        ["PRODUCT_ID"] =>  10
        ["PRICE_EUR"] => 345
        ["PRICE_RUB"] => 12000
     [2]=>
        ["PRODUCT_ID"] =>  11
        ["PRICE_USD"] => 15
        ["PRICE_RUB"] => 1000
  ["Saint-Petersburg"] =>
    [0] =>
        ["PRODUCT_ID"] => 15
        ["PRICE_USD"] => 300
        ["PRICE_RUB"] => 10000
    [1]=>
        ["PRODUCT_ID"] =>  12
        ["PRICE_EUR"] => 345
        ["PRICE_RUB"] => 12000
     [2]=>
        ["PRODUCT_ID"] =>  15
        ["PRICE_EUR"] => 15
        ["PRICE_RUB"] => 10000
}

Надо собрать из него такой массив
array(2) {
  ["Moscow"] =>
    [0] =>
        ["PRODUCT_ID"] => 10
        ["PRICE_USD"] => 300
        ["PRICE_EUR"] => 345
     [1]=>
        ["PRODUCT_ID"] =>  11
        ["PRICE_USD"] => 15
  ["Saint-Petersburg"]=>
    [0] =>
        ["PRODUCT_ID"] => 15
        ["PRICE_USD"] => 300
        ["PRICE_EUR"] => 15
    [1]=>
        ["PRODUCT_ID"] =>  12
        ["PRICE_EUR"] => 345
}

То есть, необходимо объединить массивы, в которых совпадает PRODUCT_ID.
  • Вопрос задан
  • 125 просмотров
Пригласить эксперта
Ответы на вопрос 2
sergiks
@sergiks Куратор тега PHP
♬♬
можно через промежуточную структуру,
где ключ город+product_id, а значения – массив с остальными полями.
Ответ написан
Комментировать
0xD34F
@0xD34F
$result = [];

foreach ($arr as $key => $val) {
  foreach ($val as $n) {
    $result[$key][$n['PRODUCT_ID']][] = $n;
  }
}

$result = array_map(fn($n) => array_map(fn($m) => array_merge(...$m), array_values($n)), $result);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы