【问题标题】:Merge two associative PHP arrays with different keys合并两个具有不同键的关联 PHP 数组
【发布时间】:2016-04-16 10:43:42
【问题描述】:

想象两个关联数组:

$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 元素将它们合并。我希望你明白我的意思(对不起,不是以英语为母语的人):(

【问题讨论】:

  • @Script47 感谢您的建议。但是,我无法使用您建议的帖子。这两个答案都没有帮助我按照我解释的方式组合数组。

标签: php arrays merge associative-array


【解决方案1】:

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

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

【讨论】:

  • 哈哈哈!最好的昵称! __+1 为您服务
猜你喜欢
  • 2017-06-02
  • 2012-02-25
  • 1970-01-01
  • 2016-06-09
  • 1970-01-01
  • 1970-01-01
  • 2017-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多