【问题标题】:Combine and map two arrays合并和映射两个数组
【发布时间】:2017-11-16 07:44:58
【问题描述】:

我有两个需要合并的数组的问题,其中第一个数组包含一个活动名称列表 ( 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 2key 4 将用于活动 2。永远都是这样。如果有 5 个活动,潜在客户数组将有 10 个键,key 0key 5 将用于活动 1,key 1key 6 用于活动 2,等等。

然后我有这段代码要组合(推送):

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

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

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

     }        
}

这将使数组看起来像:

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

但这只会使用键 0,1,2,因此键 3,4,5 不会在数组中。

我想要的是线索数组中的键 0 和键 3、键 1 和键 4 等进行组合,因此新的线索数组将是

[0 => 255, 1 => 386, 2 => 736]

然后我可以将其与活动数组组合,因为两个数组中的键数现在将匹配,这将给我一个看起来像的数组

["campaign 1" => 255, "campaign 2" => 386, "campaign 3" => 736]

【问题讨论】:

  • 我建议使用for() 而不是foreach() 来处理如此复杂的数组,以使事情变得简单易处理。
  • 您期望的输出是什么?您的问题在某些地方不清楚。
  • 除了@RedBottle 的评论,似乎你需要模运算符...

标签: php arrays foreach array-push


【解决方案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
)

【讨论】:

    【解决方案2】:

    试试这个

    $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);
    

    【讨论】:

      【解决方案3】:

      @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))))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-08
        • 1970-01-01
        • 2018-08-23
        • 2011-04-08
        • 1970-01-01
        • 2021-08-23
        • 1970-01-01
        • 2012-12-18
        相关资源
        最近更新 更多