Комбинированные строки и суммы чисел c двух многомерных массивов в PHP - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть два массива со строками и числами,

Я хочу сохранить только один заголовок строки и сумму sumri c для каждого ключевого значения с другим массивом.

Я перепробовал многие решения, доступные онлайн, но ничего не нашел по мере необходимости.

$array1 = 
Array
(
    [0] => Array
        (
            [0] => Out Of Warranty
            [1] => Total Orders
            [2] => Total Qty
            [3] => Canceled Orders
        )

    [1] => Array
        (
            [0] => Today<br/>(04-26-2020)
            [1] => 1
            [2] => 1
            [3] => 0
        )

    [2] => Array
        (
            [0] => Yesterday<br/>(04-25-2020)
            [1] => 0
            [2] => 0
            [3] => 0
        )

    [3] => Array
        (
            [0] => This Week<br/>(04-20-2020 - 04-26-2020)
            [1] => 22
            [2] => 39
            [3] => 0
        )

    [4] => Array
        (
            [0] => Last Week<br/>(04-13-2020 - 04-19-2020)
            [1] => 7
            [2] => 7
            [3] => 0
        )

    [5] => Array
        (
            [0] => This Month<br/>(04-01-2020 - 04-26-2020)
            [1] => 29
            [2] => 46
            [3] => 0
        )

    [6] => Array
        (
            [0] => This Year<br/>(01-01-2020 - 04-26-2020)
            [1] => 30
            [2] => 47
            [3] => 0
        )

)

$array2 = 
Array
(
    [0] => Array
        (
            [0] => Out Of Warranty
            [1] => Total Orders
            [2] => Total Qty
            [3] => Canceled Orders
        )

    [1] => Array
        (
            [0] => Today<br/>(04-24-2020)
            [1] => 10
            [2] => 10
            [3] => 0
        )

    [2] => Array
        (
            [0] => Yesterday<br/>(04-23-2020)
            [1] => 7
            [2] => 7
            [3] => 0
        )

    [3] => Array
        (
            [0] => This Week<br/>(04-20-2020 - 04-24-2020)
            [1] => 51
            [2] => 51
            [3] => 0
        )

    [4] => Array
        (
            [0] => Last Week<br/>(04-13-2020 - 04-19-2020)
            [1] => 31
            [2] => 31
            [3] => 0
        )

    [5] => Array
        (
            [0] => This Month<br/>(04-01-2020 - 04-24-2020)
            [1] => 93
            [2] => 93
            [3] => 0
        )

    [6] => Array
        (
            [0] => This Year<br/>(01-01-2020 - 04-24-2020)
            [1] => 1281
            [2] => 1281
            [3] => 1
        )

)

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

Например, выходные данные должны быть 6 индексами, т.е. сумма из 6 индексов из массивов 1 и массивов 2 -

[6] => Array
            (
                [0] => This Year<br/>(01-01-2020 - 04-26-2020)
                [1] => 1311
                [2] => 1328
                [3] => 1
            )

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Если ваши массивы всегда сортируются в одном и том же порядке:

$newItems = [];
foreach ($array1 as $key => $item) {
    $newItems[] = [
        $item[0],
        $item[1] + $array2[$key][1],
        $item[2] + $array2[$key][2],
        $item[3] + $array2[$key][3],
    ];
}

Если ключи в массивах расположены в разных порядках:

$newItems = [];
foreach ($array1 as $item) {
    $name = $item[0];
    $newItems[$name] = $item;
}
foreach ($array2 as $item) {
    $name = $item[0];
    $newItems[$name][1] += $item[1];
    $newItems[$name][2] += $item[2];
    $newItems[$name][3] += $item[3];
}
// apply array_values to get 0-indexed array
$newItems = array_values($newItems);
0 голосов
/ 28 апреля 2020

Итерируйте только те элементы, которые необходимы для логики суммирования c. Использование двух циклов будет наиболее кратким и преднамеренным способом суммирования столбцов [1], [2] и [3].

. Вы можете создать новый выходной массив, просто добавив значения второго массива в первый предоставляет более простой синтаксис сложения-присваивания.

Код: ( Демонстрация )

for ($i = 1, $size = count($array2); $i < $size; ++$i) {  // don't iterate [0] subarray (headers)
    for ($col = 1; $col <= 3; ++$col) {  // don't iterate [0] element (name)
        $array1[$i][$col] += $array2[$i][$col];
    }
}
var_export($array1);

Вывод:

array (
  0 => 
  array (
    0 => 'Out Of Warranty',
    1 => 'Total Orders',
    2 => 'Total Qty',
    3 => 'Canceled Orders',
  ),
  1 => 
  array (
    0 => 'Today<br/>(04-26-2020)',
    1 => 11,
    2 => 11,
    3 => 0,
  ),
  2 => 
  array (
    0 => 'Yesterday<br/>(04-25-2020)',
    1 => 7,
    2 => 7,
    3 => 0,
  ),
  3 => 
  array (
    0 => 'This Week<br/>(04-20-2020 - 04-26-2020)',
    1 => 73,
    2 => 90,
    3 => 0,
  ),
  4 => 
  array (
    0 => 'Last Week<br/>(04-13-2020 - 04-19-2020)',
    1 => 38,
    2 => 38,
    3 => 0,
  ),
  5 => 
  array (
    0 => 'This Month<br/>(04-01-2020 - 04-26-2020)',
    1 => 122,
    2 => 139,
    3 => 0,
  ),
  6 => 
  array (
    0 => 'This Year<br/>(01-01-2020 - 04-26-2020)',
    1 => 1311,
    2 => 1328,
    3 => 1,
  ),
)
...