【问题标题】:Merge 2 Arrays and Sum the Values (Numeric Keys)合并 2 个数组并对值求和(数字键)
【发布时间】:2011-10-29 15:51:54
【问题描述】:

我有 2 个数组

Array
(
    [010156] => Array
    (
        [supp_number] => 010156
        [totalamount] =>     4.113,23
        [debtorcred] => H
        [amount1] =>     4.113,23-
        [amount2] =>

        [amount3] =>
        [amount4] =>
        [amount5] =>
        [amount6] =>
    )
)



Array
(
    [010156] => Array
    (
        [supp_number] => 010156
        [totalamount] =>     4.113,23
        [debtorcred] => H
        [amount1] =>     4.113,23-
        [amount2] =>

        [amount3] =>
        [amount4] =>
        [amount5] =>
        [amount6] =>
    )
)

我是否可以将这些单独的数组合并为一个并将值相加,这样结果将是:

Array
(
    [010156] => Array
    (
        [supp_number] =&gt;  <<<TOTAL >>>
        [totalamount] =&gt;     <<<TOTAL >>>
        [debtorcred] =&gt; <<<TOTAL >>>
        [amount1] =&gt;      <<<TOTAL >>>
        [amount2] =&gt;  <<<TOTAL >>>

        [amount3] =&gt;  <<<TOTAL >>>
        [amount4] =&gt;  <<<TOTAL >>>
        [amount5] =&gt;  <<<TOTAL >>>
        [amount6] =&gt;  <<<TOTAL >>>
    )
)

这是我目前拥有的功能,但我似乎无法使其工作:

function array_merge_numeric_values()
{
  $arrays = func_get_args();
  $merged = array();
  foreach ($arrays as $array)
  {
    foreach ($array as $key => $value)
    {
      if ( ! isset($merged[$key]))
      {
        $merged[$key] = $value;
      }
      else
      {
        $merged[$key] += $value;
      }
    }
  }

【问题讨论】:

  • 仅供参考,您似乎在最后一个代码块中缺少右括号。

标签: php mysql arrays


【解决方案1】:

这个实际计算可以用2行代码完成,不需要循环:

http://codepad.viper-7.com/ieSkHQ

$arr1 = array('amount1' => 1, 'amount2' => 6);
$arr2 = array('amount1' => 2, 'amount2' => 7);
$add = function($a, $b) { return $a + $b; };
$summedArray = array_map($add, $arr1, $arr2);
print_r($summedArray);

您只需要进行适当的调整以适应您的嵌套结构。

【讨论】:

    【解决方案2】:

    创建一个新的空数组并在第一个数组中循环如下:

    $array1 = array('my_num' => 10, 'my_num2' => 20);
    $array2 = array('my_num' => 15, 'my_num2' => 25);
    $newArray = array();
    foreach($array1 as $key => $value){
        if(isset($array2[$key])){
            $newArray[$key] = $value+$array2[$key];
        } else {
            $newArray[$key] = $value;
        }
    }
    
    print_r($newArray);
    

    【讨论】:

      【解决方案3】:

      $value 在您的情况下是一个数组,而不是一个值。你可以试试这个:

      function array_merge_numeric_values()
      {
          $arrays = func_get_args();
      
          $merged = array();
          foreach ($arrays as $array)
          {
              foreach ($array as $key => $value)
              {
                  if(!isset($merged[$key]))
                  {
                      $merged[$key] = array();
                  }
      
                  foreach($value as $kk => $vv)
                  {
                      if ( ! isset($merged[$key][$kk]))
                      {
                          $merged[$key][$kk] = $vv;
                      }
                      else
                      {
                          $merged[$key][$kk] += $vv;
                      }
                  }
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2013-06-11
        • 2018-06-29
        • 1970-01-01
        • 2018-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-13
        • 2020-07-22
        相关资源
        最近更新 更多