Повторяющиеся значения в многомерном массиве и столбце слияния

У меня есть такой массив:

$my_arr = array();
array(14) {
[0]=>
    array(4) {
    ["id_dde"]=>
    string(3) "535"
    ["id_station"]=>
    string(3) "130"
    ["id_catalog"]=>
    string(2) "41"
    ["quantity"]=>
    string(2) "50"
  }
  [1]=>
  array(4) {
    ["id_dde"]=>
    string(3) "535"
    ["id_station"]=>
    string(3) "130"
    ["id_catalog"]=>
    string(3) "259"
    ["quantity"]=>
    string(2) "70"
  }

Со многими такими индексами. Моя цель — иметь уникальное значение для id_dde, id_station и id_catalog. Если у меня есть два индекса с массивом, которые имеют одинаковые значения в этих столбцах, я хочу удалить один индекс и объединить оба столбца количества. Вот пример:

$my_arr = array();
array(14) {
[0]=>
    array(4) {
    ["id_dde"]=>
    string(3) "535"
    ["id_station"]=>
    string(3) "130"
    ["id_catalog"]=>
    string(2) "41"
    ["quantity"]=>
    string(2) "50"
  }
  [1]=>
  array(4) {
    ["id_dde"]=>
    string(3) "535"
    ["id_station"]=>
    string(3) "130"
    ["id_catalog"]=>
    string(3) "41"
    ["quantity"]=>
    string(2) "5"
  }

=>

array(14) {
[0]=>
    array(4) {
    ["id_dde"]=>
    string(3) "535"
    ["id_station"]=>
    string(3) "130"
    ["id_catalog"]=>
    string(2) "41"
    ["quantity"]=>
    string(2) "55"
  }

Как я могу это сделать ? Я пробовал с двойным foreach и unset, но не получил правильного ответа, я думаю, есть и лучший метод?

Спасибо!


person AjaxLoser    schedule 09.08.2018    source источник
comment
Мы всегда рады помочь и поддержать новых программистов, но вы должны сначала помочь себе. :-) После дополнительных исследований, если вы есть проблема опубликуйте, что вы пробовали с четким объяснением того, что не работает, и предоставьте минимальный, полный и проверяемый пример. Прочитайте Как задать хороший вопрос. Не забудьте пройти экскурсию и прочитать это.   -  person Jay Blanchard    schedule 09.08.2018
comment
Я нашел аналогичный пример здесь " title=" в php объединить повторяющийся набор элементов многомерного массива и суммировать "> stackoverflow.com/questions/24150063/ , я не нашел его, когда провел свои исследования... Извиняюсь! :)   -  person AjaxLoser    schedule 09.08.2018


Ответы (1)


Я получил ожидаемый результат с двойным foreach. Попробуй это :

$result=[];
foreach ($my_arr as &$dde1) {
    $qty = 0;
    foreach ($my_arr as $key => $dde2) {
        if ($dde1['id_dde'] == $dde2['id_dde'] && $dde1['id_station'] == $dde2['id_station'] && $dde1['id_catalog'] == $dde2['id_catalog']) {
            $qty += $dde2['quantity'];
            unset($my_arr[$key]);
        }
    }
    $dde1['quantity'] = $qty;
    $result[] = $dde1;
}
person Jouby    schedule 09.08.2018
comment
Спасибо, я пропустил часть... Здесь я нашел другое решение stackoverflow.com/questions/24150063/ но все равно спасибо :) - person AjaxLoser; 09.08.2018