使用键合并两个多维数组并相加值

3
我想通过键(product_id)合并两个数组,并添加这些值(usage)。 数组1
阵列
(
    [0] => Array
        (
            [name] => 重新安排服务
            [usage] => 1
            [product_id] => 8
        )
[1] => Array         (             [name] => 添加图像             [usage] => 1             [product_id] => 5         )
[2] => Array         (             [name] => 每个日历事件             [usage] => 1             [product_id] => 14         )
)

数组2

阵列
(
    [0] => Array
        (
            [name] => 添加图像
            [usage] => 1
            [product_id] => 5
        )
[1] => Array         (             [name] => 安排服务             [usage] => 3             [product_id] => 11         )
[2] => Array         (             [name] => 每个日历事件             [usage] => 2             [product_id] => 14         )
[3] => Array         (             [name] => 销售绩效仪表板             [usage] => 2             [product_id] => 30         )
[4] => Array         (             [name] => 引用             [usage] => 1             [product_id] => 32         )
)

我需要输出如下,合并和添加使用值。

数组
(
    [0] => 数组
        (
            [名称] => 添加图像
            [用途] => 2
            [产品编号] => 5
        )
[1] => 数组 ( [名称] => 安排服务 [用途] => 3 [产品编号] => 11 )
[2] => 数组 ( [名称] => 每个日历事件 [用途] => 3 [产品编号] => 14 )
[3] => 数组 ( [名称] => 销售绩效仪表板 [用途] => 2 [产品编号] => 30 )
[4] => 数组 ( [名称] => 报价 [用途] => 1 [产品编号] => 32 )
[5] => 数组 ( [名称] => 重新安排服务 [用途] => 1 [产品编号] => 8 )
)

这是我的创建数组的代码

    foreach($query->rows as $product){
$top_products[]=array( 'name'=>$product['name'], 'usage'=>$product['pusage'], 'product_id'=>$product['product_id'] );
}
    foreach($query_2->rows as $product){
$top_point_products[]=array( 'name'=>$product['name'], 'usage'=>$product['p_usage'], 'product_id'=>$product['product_id'] );
}

请同时发布您的代码 - ASR
可能是Merging two multidimensional arrays on specific key的重复内容。 - Daniyal
@Daniyal 这是另一个问题,我需要添加使用值,而他们只是将标题与名称合并。 - gowtham4chat
@ASR 我已经添加了我的代码 - gowtham4chat
4个回答

1
$first =array(
array( "name" => "重新安排服务", "usage" => 1, "product_id" => 8 ), array( "name" => "添加图片", "usage" => 1, "product_id" => 5 ), array( "name" => "每个日历事件", "usage" => 1, "product_id" => 14 ) ); $second =array(
array( "name" => "添加图片", "usage" => 1, "product_id" => 5 ), array( "name" => "预约服务", "usage" => 3, "product_id" => 11 ), array( "name" => "每个日历事件", "usage" => 2, "product_id" => 14 ), array( "name" => "销售绩效仪表盘", "usage" => 2, "product_id" => 30 ), array( "name" => "报价", "usage" => 1, "product_id" => 32 ) ); $result = array_unique(array_merge($first,$second), SORT_REGULAR);
使用array_unique和array_merge。

如果是,则只需像这样替换第一个和第二个数组 - Aditya Shah
$result = array_unique(array_merge($second,$first), SORT_REGULAR); - Aditya Shah
是的,第一个数组中有“添加图像”的使用=1,第二个数组中也有“添加图像”的使用=1,因此在我的结果中,“添加图像”的使用值需要为2。 - gowtham4chat
你想在合并数组时添加“使用值”吗? - Aditya Shah
是的,在合并时我想添加使用值。 - gowtham4chat
显示剩余5条评论

0
尝试这段代码。
<?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]=> [name]=>添加图片 [usage]=>2 [product_id]=>5

[1]=> [name]=>安排服务 [usage]=>3 [product_id]=>11

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

[3]=> [name]=>销售绩效仪表板 [usage]=>2 [product_id]=>30

[4]=> [name]=>报价 [usage]=>1 [product_id]=>32

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


0
使用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); 

希望这能有所帮助。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接