PHP Как вы суммируете элементы в массиве по одинаковому типу с двумя разными ограничивающими атрибутами

Учитывая массив, как это:

array(792) {
  [0]=>
  array(4) {
    [0]=>
    string(8) "KNOT1810"
    [1]=>
    string(6) "760.00"
    [2]=>
    string(5) "MBBOE"
    [3]=>
    string(38) "event 10/06/18"
  }
  [1]=>
  array(4) {
    [0]=>
    string(8) "KNOT1810"
    [1]=>
    string(6) "400.00"
    [2]=>
    string(5) "MBPAR"
    [3]=>
    string(38) "event 10/06/18"
  }
  [2]=>
  array(4) {
    [0]=>
    string(8) "KNOT1810"
    [1]=>
    string(6) "1760.00"
    [2]=>
    string(5) "MBBOE"
    [3]=>
    string(38) "event 10/06/18"
  }
  [3]=>
  array(4) {
    [0]=>
    string(8) "KNOT1810"
    [1]=>
    string(6) "5860.00"
    [2]=>
    string(5) "MAINSECD"
    [3]=>
    string(38) "event 10/06/18"
  }
  [4]=>
  array(4) {
    [0]=>
    string(8) "KNOT1810"
    [1]=>
    string(6) "-5000.00"
    [2]=>
    string(5) "MAINSECD"
    [3]=>
    string(38) "event 10/06/18"
  }
  [5]=>
  array(4) {
    [0]=>
    string(8) "CHEN0707"
    [1]=>
    string(6) "500.00"
    [2]=>
    string(5) "MBBOE"
    [3]=>
    string(38) "event 10/07/18"
  }
  [6]=>
  array(4) {
    [0]=>
    string(8) "CHEN0707"
    [1]=>
    string(6) "760.00"
    [2]=>
    string(5) "MBPAR"
    [3]=>
    string(38) "event 10/07/18"
  }
  [7]=>
  array(4) {
    [0]=>
    string(8) "CHEN0707"
    [1]=>
    string(6) "1760.00"
    [2]=>
    string(5) "MBBOE"
    [3]=>
    string(38) "event 10/07/18"
  }
  [8]=>
  array(4) {
    [0]=>
    string(8) "CHEN0707"
    [1]=>
    string(6) "5860.00"
    [2]=>
    string(5) "MAINSECD"
    [3]=>
    string(38) "event 10/07/18"
  }
  [9]=>
  array(4) {
    [0]=>
    string(8) "CHEN0707"
    [1]=>
    string(6) "-5000.00"
    [2]=>
    string(5) "MAINSECD"
    [3]=>
    string(38) "event 10/07/18"
  }
  [10]=>
  array(4) {
    [0]=>
    string(8) "CHEN0707"
    [1]=>
    string(6) "5000.00"
    [2]=>
    string(5) "MAINSECD"
    [3]=>
    string(38) "event 10/09/18"
  }
}

В котором элементы в массиве с индексом [0] ("KNOT1810", "CHEN0707") являются кодами клиентов, а элементы с индексом [1] являются зарядами, а элементы с индексом [2] ("MBBAN", "MAINSECD"и т. Д.) - это КОДЫ ЗАРЯДОВ, а предметы с индексом [3] - ДАТЫ СОБЫТИЙ.

Может быть любое количество различных КОДОВ КЛИЕНТА, ЗАРЯДОВ (как положительных, так и отрицательных) и ДАТЫ СОБЫТИЙ, но существует определенный набор КОДОВ ЗАРЯДКИ:

'MBELE'
'MBFUR'
'MBINT'
'MBLAB'
'MBMIS'
'MBPAR'
'MBSEC'
'MBSPA'
'MBWAL'
'MAINSECD'
'MBBOE'
'MBBAN'

Как я могу отсортировать или уменьшить этот массив так, чтобы сборы объединялись (суммировались) с помощью одного и того же КОДА ЗАРЯДКИ только с одинаковыми ДАТА СОБЫТИЯ и КОДОМ КЛИЕНТА, но НЕ объединялись или не суммировались с КОДАМИ ЗАРЯДКИ из РАЗЛИЧНЫХ КОДОВ КЛИЕНТА, а НЕ объединялись с ОДНЫМ КОДОМ КЛИЕНТА, но РАЗНЫЕ ДАТЫ СОБЫТИЙ.

В результате получился бы такой массив:

array(792) {
  [0]=>
  array(4) {
    [0]=>
    string(8) "KNOT1810"
    [1]=>
    string(6) "2520.00"
    [2]=>
    string(5) "MBBOE"
    [3]=>
    string(38) "event 10/06/18"
  }
  }
  [1]=>
  array(4) {
    [0]=>
    string(8) "KNOT1810"
    [1]=>
    string(6) "400.00"
    [2]=>
    string(5) "MBPAR"
    [3]=>
    string(38) "event 10/06/18"
  }
  [3]=>
  array(4) {
    [0]=>
    string(8) "KNOT1810"
    [1]=>
    string(6) "860.00"
    [2]=>
    string(5) "MAINSECD"
    [3]=>
    string(38) "event 10/06/18"
  }
  [5]=>
  array(4) {
    [0]=>
    string(8) "CHEN0707"
    [1]=>
    string(6) "2260.00"
    [2]=>
    string(5) "MBBOE"
    [3]=>
    string(38) "event 10/07/18"
  }
  [6]=>
  array(4) {
    [0]=>
    string(8) "CHEN0707"
    [1]=>
    string(6) "760.00"
    [2]=>
    string(5) "MBPAR"
    [3]=>
    string(38) "event 10/07/18"
  }
  [8]=>
  array(4) {
    [0]=>
    string(8) "CHEN0707"
    [1]=>
    string(6) "860.00"
    [2]=>
    string(5) "MAINSECD"
    [3]=>
    string(38) "event 10/07/18"
  }
  [8]=>
  array(4) {
    [0]=>
    string(8) "CHEN0707"
    [1]=>
    string(6) "5000.00"
    [2]=>
    string(5) "MAINSECD"
    [3]=>
    string(38) "event 10/09/18"
  }
}

В идеале я хочу избежать сложного для циклов и ручной сортировки / переиндексации и использовать что-то вроде array_reduce(), но я открыт для любого решения.

Обратите внимание, что в этом массиве могут быть тысячи элементов и дополнительные значения в элементах, не перечисленных в примере.

Благодарю вас!

0 ответов

Другие вопросы по тегам