合并并映射两个数组

时间:2017-11-16 07:44:59

标签: php arrays foreach array-push

我遇到两个需要合并的数组的问题,其中第一个数组包含一个广告系列名称列表(page_data),如

[0 => "Campaign 1", 1 => "Campaign 2", 2 => "Campaign 3"]

和另一个包含广告系列潜在客户数量的数组。但是这个数组的密钥数量是广告系列数组的两倍,如下所示:

[0 => 222, 1 => 342, 2 => 71, 3 => 33, 4 => 43, 5 => 665]

它包含两倍的密钥,因为它会从两种不同的表单中获取潜在客户,因此key 0key 3的值将用于广告系列1和key 2以及{{1将用于竞选2.它将永远是这样的。如果有5个广告系列,则排名数组将包含10个密钥,key 4key 0将用于广告系列1,key 5key 1用于广告系列2,等等。

然后我将这段代码组合起来(推):

key 6

这将使得和数组看起来像:

foreach(json_decode($result) as $key) {                                

   foreach($pages["page_data"] as $p => $pvalue) {

       array_push($leadArray, array("pageName" => $pvalue["form_name"], "pageLeads" => $key[$p]));

     }        
}

但是这只会占用密钥0,1,2,因此密钥3,4,5不会在数组中。

我想要的是引线阵列中的键0和键3,键1和键4等组合,以便新的引线阵列

["campaign 1" => 222, "campaign 2" => 342, "campaign 3" => 71]

我可以将其与c​​ampaign数组合并,因为两个数组中的键数现在将匹配,这将为我提供一个看起来像

的数组
[0 => 255, 1 => 386, 2 => 736]

3 个答案:

答案 0 :(得分:1)

使用array_chunk函数拆分第二个数组,可以很容易地对值进行求和。

使用此功能时,阵列将分为两个阵列。在第一个数组中,您将获得值0,1,2,并且在第二个数组中,您将具有3个,4个,5个值。现在遍历您的第一个数组,使用您可以访问值对的键:0-3,1-4,2-5。

查看此代码:

<?php

$array1 = [0 => "Campaign 1", 1 => "Campaign 2", 2 => "Campaign 3"];
$array2 = [0 => 222, 1 => 342, 2 => 71, 3 => 33, 4 => 43, 5 => 665];

$chunkedArray2 = array_chunk($array2, count($array1), false);

$result = [];
foreach($array1 as $key => $value) {
    $result[$value] = $chunkedArray2[0][$key] + $chunkedArray2[1][$key];
}

var_dump($result);

结果是:

Array
(
    [Campaign 1] => 255
    [Campaign 2] => 385
    [Campaign 3] => 736
)

答案 1 :(得分:0)

试试这个

$result = json_decode($result);
$count = count($result);
$final = array();
foreach($result as $key => $value){
  $final[$value] = $pages["page_data"][$key] + $pages["page_data"][$key+$count];
}
var_dump($final);

答案 2 :(得分:0)

@aslawin方法可以通过一些功能实现轻松实现

$array1 = [0 => "Campaign 1", 1 => "Campaign 2", 2 => "Campaign 3"];
$array2 = [0 => 222, 1 => 342, 2 => 71, 3 => 33, 4 => 43, 5 => 665];

$res = array_combine($array1, 
           array_map(function($i1, $i2) { return $i1+$i2; },
                 ...array_chunk($array2, count($array1))))