合并具有不同键的两个关联PHP数组

时间:2016-01-11 23:38:53

标签: php arrays merge associative-array

想象一下两个关联数组:

$array1= array(
        array('date'=>'1-Sep-2016', 'price1'=>98),
        array('date'=>'1-Oct-2016', 'price1'=>77),
        array('date'=>'1-Nov-2016', 'price1'=>87),
        array('date'=>'1-Dec-2016', 'price1'=>88),
        array('date'=>'1-Jan-2017', 'price1'=>91)
        );

$array2= array(
        array('date'=>'1-Feb-2016', 'price2'=>98),
        array('date'=>'1-Mar-2016', 'price2'=>77),
        array('date'=>'1-Apr-2016', 'price2'=>87),
        array('date'=>'1-May-2016', 'price2'=>88),
        array('date'=>'1-Jun-2016', 'price2'=>91),
        array('date'=>'1-Jul-2016', 'price2'=>88),
        array('date'=>'1-Aug-2016', 'price2'=>88),
        array('date'=>'1-Sep-2016', 'price2'=>88),
        array('date'=>'1-Oct-2016', 'price2'=>88)
        );

合并后的数组应如下所示:

$merged =array(
        array('date'=>'1-Feb-2016', 'price2'=>98),
        array('date'=>'1-Mar-2016', 'price2'=>77),
        array('date'=>'1-Apr-2016', 'price2'=>87),
        array('date'=>'1-May-2016', 'price2'=>88),
        array('date'=>'1-Jun-2016', 'price2'=>91),
        array('date'=>'1-Jul-2016', 'price2'=>88),
        array('date'=>'1-Aug-2016', 'price2'=>88),
        array('date'=>'1-Sep-2016', 'price1'=>98, 'price2'=>88),
        array('date'=>'1-Oct-2016', 'price1'=>77, price2'=>88),
        array('date'=>'1-Nov-2016', 'price1'=>87),
        array('date'=>'1-Dec-2016', 'price1'=>88),
        array('date'=>'1-Jan-2017', 'price1'=>91)
};

请注意以下几行:

  array('date'=>'1-Sep-2016', 'price1'=>98, 'price2'=>88),
  array('date'=>'1-Oct-2016', 'price1'=>77, price2'=>88),

简而言之: 我需要合并两个数组,而不从任何一个数组中删除任何元素。 Array1将始终包含dateprice1个元素,而array2将始终包含dateprice2元素。因此,如果两个数组都包含相同的日期(例如:1-Sep-2016),则结果数组(merged)需要通过添加price1price2元素来合并它们。我希望你明白我的观点(对不起,不是以英语为母语的人):(

1 个答案:

答案 0 :(得分:4)

您可以使用日期作为合并数组中的键来执行此操作。

$i = 1;
foreach (array($array1, $array2) as $array) { 
    foreach ($array as $entry) {
        $key = strtotime($entry['date']); // convert to a timestamp so it will be sortable
        $new_array[$key]['date'] = $entry['date'];
        $new_array[$key]["price$i"] = $entry["price$i"];
    }
    $i++;
}

然后,如果要对结果进行排序,可以使用

ksort($new_array);