【问题标题】:add the values of two different associative arrays in php . display unique key-values too in the result array [duplicate]在 php 中添加两个不同关联数组的值。在结果数组中也显示唯一的键值[重复]
【发布时间】:2013-04-20 10:10:53
【问题描述】:

我需要合并两个可能包含或不包含相同键的关联数组,如果键相同,则需要添加值并将其存储在结果数组中

 $array1 = array(
      'a' => 5,
      'b' => 10,
      'c' => 6,
      'k' = > 10
    );

$array2 = array(
  'a' => 100,
  'c' => 200,
  'd' => 30,
  'k' => 10
);

如何将上面的两个关联数组相加,得到下面的输出/关联数组——

 $array2 = array(
      'a' => 105,
      'b' => 10,
      'c' => 206,
      'd' => 30,
      'k' => 20
    );

【问题讨论】:

标签: php associative-array array-merge


【解决方案1】:

试试

 $array1 = array(
      'a' => 5,
      'b' => 10,
      'c' => 6,
      'k' => 10
    );

$array2 = array(
  'a' => 100,
  'c' => 200,
  'd' => 30,
  'k' => 10
);

$sums = array();
foreach (array_keys($array1 + $array2) as $key) {
    $sums[$key] = (isset($array1[$key]) ? $array1[$key] : 0) + (isset($array2[$key]) ? $array2[$key] : 0);
}

print_r($sums);

【讨论】:

  • 工作正常...非常感谢! ...但是,您能否解释一下以下部分- (isset($array1[$key]) ? $array1[$key] : 0)
  • 如果你认为它有效,你应该接受他的回答 Mayur
  • @antony--我接受 Tamil Selvan 的回答...只是想稍微解释一下 (isset($array1[$key]) ? $array1[$key] : 0) 因为我是新手到 PHP 和编程。
  • @Mayur 你还没有接受它。您必须单击对勾。如果您想了解速记条件语句,请提出另一个问题或阅读此处davidwalsh.name/php-ternary-examples
  • 先生们,它现在被接受了......!!! (我是 stackoverflow.com 的新手,所以很清楚..SORRY)
【解决方案2】:
$a3 = array_merge_recursive ($array1, $array2);
foreach ($a3 as $key => $value)
{
    $a3[$key] = (is_array($value))?array_sum($value):$value;
}

【讨论】:

    【解决方案3】:

    用于查找唯一索引值

    $array2 =array_merge($array1,$array2);
    

    为了找到独特的价值,你可以尝试

    $array2 =array_unique(array_merge($array1,$array2));
    

    【讨论】:

      【解决方案4】:

      我不知道您是否可以使用内部函数执行此操作,但只需遍历两个数组即可。

      function merge_add($array1, $array2)
      {
          $result = array();
          merge_add_array($array1, $result);
          merge_add_array($array2, $result);
          return $result;
      }
      
      function merge_add_array($array, &$result)
      {
          foreach ($array as $key=>$value)
          {
              if (array_key_exists($key, $result))
              {
                  $result[$key] += $value;
              }
              else
              {
                  $result[$key] = $value;
              }
          }
      }
      
      $result = merge_add($array1, $array2);
      

      & 将导致passing by reference

      【讨论】:

        【解决方案5】:
        <?php
        $array1 = array(
              'a' => 5,
              'b' => 10,
              'c' => 6,
              'k' => 10
            );
        
        $array2 = array(
          'a' => 100,
          'c' => 200,
          'd' => 30,
          'k' => 10
        );
        
        $keys = array_keys($array1 + $array2);
        
        foreach ($keys as $key) {
            $array2[$key] = isset($array1[$key]) && isset($array2[$key]) ? ($array1[$key] + $array2[$key]) : (isset($array1[$key]) ? $array1[$key] : $array2[$key]);
        }
        
        print_r($array2);
        

        【讨论】:

          猜你喜欢
          • 2017-02-07
          • 1970-01-01
          • 2016-06-07
          • 2013-02-09
          • 2021-06-14
          • 2018-05-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多