首页 > 解决方案 > 将两个不同数组的元素合并到第三个数组

问题描述

我希望你能帮助我......我有2个数组,我想将它们插入一个1array,new_date如果没有datadata='0',如果没有data1data1='0'。

对不起,如果我不知道如何解释好,我举了一个小例子。我已经尝试过 array_merge (但一切都是分开的)和 array_combine (它给出了两个参数应该有相同数量的元素的错误)。 预先感谢您提供的所有帮助...

array1 = array:5 [▼
      0 => array:2 [▼
        "data" => 118
        "new_date" => "06-2017"
      ]
      1 => array:2 [▼
        "data" => 263
        "new_date" => "07-2017"
      ]
      2 => array:2 [▼
        "data" => 264
        "new_date" => "08-2017"
      ]
      3 => array:2 [▼
        "data" => 266
        "new_date" => "09-2017"
      ]
      4 => array:2 [▼
        "data" => 306
        "new_date" => "10-2017"
      ]
      5 => array:2 [▼
        "data" => 100
        "new_date" => "11-2017"
      ]

array2 = array:6 [▼
      0 => array:2 [▼
        "data1" => 100
        "new_date" => "02-2016"
      ]
      1 => array:2 [▼
        "data1" => 170
        "new_date" => "06-2017"
      ]
      2 => array:2 [▼
        "data1" => 354
        "new_date" => "07-2017"
      ]
      3 => array:2 [▼
        "data1" => 397
        "new_date" => "08-2017"
      ]
      4 => array:2 [▼
        "data1" => 421
        "new_date" => "09-2017"
      ]
      5 => array:2 [▼
        "data1" => 531
        "new_date" => "10-2017"
      ]

示例:

array3 = array:7 [▼
      0 => array:3 [▼
        "data1" => 111
        "data" => 0
        "new_date" => "02-2016"
      ]
      1 => array:3 [▼
        "data1" => 170
        "data" => 118
        "new_date" => "06-2017"
      ]
      2 => array:3 [▼
        "data1" => 354
        "data" => 263
        "new_date" => "07-2017"
      ]
      3 => array:3 [▼
        "data1" => 397
        "data" => 264
        "new_date" => "08-2017"
      ]
      4 => array:3 [▼
        "data1" => 421
        "data" => 266
        "new_date" => "09-2017"
      ]
      5 => array:3 [▼
        "data1" => 531
        "data" => 306
        "new_date" => "10-2017"
      ]
      6 => array:3 [▼
        "data1" => 0
        "data" => 100
        "new_date" => "11-2017"
      ]

标签: phparrays

解决方案


用于array_combine设置new_dateas 键。然后将第一个数组元素d1(在您的示例中作为“data1”)添加到array_map. 精细地,在第二个数组上循环并添加d1存在,如果不存在,则其余所有d(在您的示例中为“数据”)为 0。

你可以这样做:

$a1 = array(["d"=>1, "new_date"=> "06-2017"],["d"=>2, "new_date"=> "02-2016"]);
$a2 = array(["d1"=>3, "new_date"=> "06-2017"],["d1"=>4, "new_date"=> "07-2017"]);

$a1 = array_combine(array_column($a1, "new_date"), $a1);
$a2 = array_combine(array_column($a2, "new_date"), $a2);

// adding default d1 as 0
$a1 = array_map(function ($e) {return array_merge($e, ["d1" => 0]);},$a1);

foreach($a2 as $k => $v) {
    if (isset($a1[$k]))
        $a1[$k]["d1"] = $v["d1"]; // if new_data exist set only d1
    else
        $a1[$k] = array_merge($v, ["d" => 0]); //add with d as 0
}

你的结果将在$a1


推荐阅读