【问题标题】:Merging two multi-dimensional arrays using key and adding values使用键和添加值合并两个多维数组
【发布时间】:2017-06-07 07:13:13
【问题描述】:

我想使用 key(product_id) 合并两个数组并添加该值(usage)。 阵列 1

大批 ( [0] => 数组 ( [名称] => 重新安排服务 [用法] => 1 [product_id] => 8 ) [1] => 数组 ( [名称] => 添加图像 [用法] => 1 [product_id] => 5 ) [2] => 数组 ( [名称] => 每个日历事件 [用法] => 1 [product_id] => 14 ) )

数组 2

大批 ( [0] => 数组 ( [名称] => 添加图像 [用法] => 1 [product_id] => 5 ) [1] => 数组 ( [名称] => 安排 A 服务 [用法] => 3 [product_id] => 11 ) [2] => 数组 ( [名称] => 每个日历事件 [用法] => 2 [product_id] => 14 ) [3] => 数组 ( [名称] => 销售业绩仪表板 [用法] => 2 [product_id] => 30 ) [4] => 数组 ( [名称] => 引用 [用法] => 1 [product_id] => 32 ) )

我需要一个像这样合并和添加使用值的输出。

大批 ( [0] => 数组 ( [名称] => 添加图像 [用法] => 2 [product_id] => 5 ) [1] => 数组 ( [名称] => 安排 A 服务 [用法] => 3 [product_id] => 11 ) [2] => 数组 ( [名称] => 每个日历事件 [用法] => 3 [product_id] => 14 ) [3] => 数组 ( [名称] => 销售业绩仪表板 [用法] => 2 [product_id] => 30 ) [4] => 数组 ( [名称] => 引用 [用法] => 1 [product_id] => 32 ) [5] => 数组 ( [名称] => 重新安排服务 [用法] => 1 [product_id] => 8 ) )

这是我创建数组的代码

foreach($query->rows as $product){ $top_products[]=数组( '名称'=>$产品['名称'], '使用'=>$product['pusage'], 'product_id'=>$product['product_id'] ); } foreach($query_2->rows as $product){ $top_point_products[]=数组( '名称'=>$产品['名称'], 'usage'=>$product['p_usage'], 'product_id'=>$product['product_id'] ); }

【问题讨论】:

标签: php arrays multidimensional-array


【解决方案1】:
$first =数组( 大批( "name" => "重新安排服务", “使用” => 1, "product_id" => 8 ), 大批( "名称" => "添加图像", “使用” => 1, "product_id" => 5 ), 大批( "name" => "每个日历事件", “使用” => 1, "product_id" => 14 ) ); $秒=数组( 大批( "名称" => "添加图像", “使用” => 1, "product_id" => 5 ), 大批( "name" => "调度服务", “使用” => 3, "product_id" => 11 ), 大批( "name" => "每个日历事件", “使用” => 2, "product_id" => 14 ), 大批( "名称" => "销售业绩仪表板", “使用” => 2, "product_id" => 30 ), 大批( "名称" => "报价", “使用” => 1, "product_id" => 32 ) ); $result = array_unique(array_merge($first,$second), SORT_REGULAR);

使用 array_unique & array_merge

【讨论】:

  • 是的,但是当我使用 array_unique 时,我无法添加两个数组的使用值
  • 我想在合并时添加两个数组,例如第一个数组中的 product_id=>5 需要在第二个数组中添加 product_id=>5 的使用值
  • 你想覆盖第二个数组的使用值吗?
  • 如果是,那么只需像这样替换第一个和第二个数组
  • $result = array_unique(array_merge($second,$first), SORT_REGULAR);
【解决方案2】:

使用array_merge function,像这样:

$C = array_merge($A, $B);
print_r($C);

Read manual Array merge

【讨论】:

    【解决方案3】:

    试试这个代码

    <?php
    
    $array1=array
    (
        0 => array(
                'name' => "Reschedule A Service", 
                'usage' => 1,
                'product_id' => 8
            ),
    
        1 => Array
            (
                'name' => "Adding An Image",
                'usage' => 1,
                'product_id' => 5
            ),
    
        2 => Array
            (
                'name' => "Each Calendar Event",
                'usage' => 2,
                'product_id' => 14
            )
    
    );
    
    $array2=array
    (
        0 => Array
            (
                'name' => "Adding An Image",
                'usage' => 1,
                'product_id' => 5
            ),
    
        1 => Array
            (
                'name' => "Schedule A Service",
                'usage' => 3,
                'product_id' => 11
            ),
    
        2 => Array
            (
                'name' => "Each Calendar Event",
                'usage' => 5,
                'product_id' => 14
            ),
    
        3 => Array
            (
                'name' => "Sales Performance Dashboard",
                'usage' => 2,
                'product_id' => 30
            ),
    
        4 => Array
            (
                'name' => "Quote",
                'usage' => 1,
                'product_id' => 32
            )
    
    );
    
    $product_id1=array_column($array1, 'product_id');  
    $product_id2=array_column($array2, 'product_id');  
    
    $new=array_intersect($product_id1,$product_id2);
    
    foreach ($new as $key => $value) {
        if(in_array($new[$key],$product_id2)){
            $array2[array_search($new[$key],$product_id2)]['usage']+=$array1[$key]['usage'];
          }
    }
    $new1=array_diff($product_id1,$product_id2);
    foreach ($new1 as $key => $value) {
            $array2[]=$array1[$key];
     }
    
    foreach ($array2 as $key => $value) {
        echo "[".$key."]=><br>";
        foreach ($value as $key1 => $value1) {
            echo "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp";
            echo "[".$key1."]=>".$value1."<br>";
    
        }
        echo "<br>";
    }
    ?>
    

    输出

    [0]=> [名称]=>添加图像 [用法]=>2 [product_id]=>5

    [1]=> [名称]=>安排服务 [用法]=>3 [product_id]=>11

    [2]=> [name]=>每个日历事件 [用法]=>7 [product_id]=>14

    [3]=> [名称]=>销售业绩仪表板 [用法]=>2 [product_id]=>30

    [4]=> [名称]=>报价 [用法]=>1 [product_id]=>32

    [5]=> [name]=>重新安排服务 [用法]=>1 [product_id]=>8

    【讨论】:

      【解决方案4】:

      使用array_merge 和一个简单的foreach 循环来检查您的状况并更新usage值。

      见下文

      $result = array_merge($arrArray1, $arrArray2);
      
      $result2 = array(); 
      
      foreach($result as $key => $value){
              if(array_key_exists($value['product_id'], $result2)){
                     $result2[$value['product_id']]['usage'] +=  $value['usage'];
              } else{
                  $result2[$value['product_id']] = $value;
              }
      }
      
      print_r($result2);
      

      如果你想重置你的结果数组索引,像这样再次使用array_merge

      $result2 = array_merge($result2); 
      

      希望这会有所帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-27
        • 2014-03-08
        • 2017-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-14
        • 1970-01-01
        相关资源
        最近更新 更多