【问题标题】:Combined Strings and sum numeric two multidimensional arrays in PHPPHP中的组合字符串和数字两个多维数组的总和
【发布时间】:2020-08-10 06:07:05
【问题描述】:

我有以下两个带有字符串和数字的数组,

我只想保留一个字符串标题,并将每个键值的数值与另一个数组相加。

我尝试了许多在线可用的解决方案,但没有找到所需的解决方案。

$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 个索引,即来自 array1 和 array2 的 6 个索引的总和 -

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

【问题讨论】:

    标签: php arrays multidimensional-array merge php-7


    【解决方案1】:

    如果您的数组始终按相同顺序排序:

    $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] =&gt; Array ( [0] =&gt; Out Of Warranty [1] =&gt; 0 [2] =&gt; 0 [3] =&gt; 0 ) 导致 0 索引标签为空
    • 那么,检查key是否为0且不加/跳过值,你可以做到,
    【解决方案2】:

    仅迭代求和逻辑所需的元素。使用 2 个循环将是对 [1][2][3] 列求和的最简洁和深思熟虑的方式。

    您可以创建一个新的输出数组,但只需将第二个数组值添加到第一个数组值即可提供更简单的加法-赋值语法。

    代码:(Demo)

    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,
      ),
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      • 2014-04-18
      • 1970-01-01
      • 1970-01-01
      • 2017-07-08
      • 2014-07-16
      相关资源
      最近更新 更多