如何将两个数组组合在一起?

时间:2013-11-26 11:16:52

标签: php arrays

我有两个数组

第一个数组

[0] => array('date' => "2013-11-26", 'value' => "2")
[1] => array('date' => "2013-11-24", 'value' => "6")
# Note there is no entry for "2013-11-25"

第二个数组

[0] => array('date' => "2013-11-26", 'value' => "null")
[1] => array('date' => "2013-11-25", 'value' => "null")
[2] => array('date' => "2013-11-24", 'value' => "null")

我希望以第二个数组中的所有条目从第一个数组中获取value的方式组合它们,如果条目存在的话。所以期望的输出如下。

期望的输出

[0] => array('date' => "2013-11-26", 'value' => "2")
[1] => array('date' => "2013-11-25", 'value' => "null")
[2] => array('date' => "2013-11-24", 'value' => "6")

我看到了一种循环遍历第二个数组的方法,然后通过第一个数组执行内部循环来检查匹配的条目:

foreach($second as &$s) {
    foreach($first as $f) {
        if($f['date'] == $s['date']) {
            $s['value'] = $f['value'];
        }
    }
}

但是没有更有效的方法来做到这一点,例如一个本机PHP函数来管理这样的操作吗?

1 个答案:

答案 0 :(得分:1)

数组是否需要按日期排序?

使用简单的foreach https://eval.in/73533

$result = $s = array();
foreach (array_merge($a1, $a2) as $v) {

  if (! $s[ $v["date"] ]++) $result[]= $v;

}
带有关闭的

array_filter(),用于过滤https://eval.in/73523

$a1 = array(
  0 => array('date' => "2013-11-26", 'value' => "2"),
  1 => array('date' => "2013-11-24", 'value' => "6"),
);
$a2 = array(
  0 => array('date' => "2013-11-26", 'value' => "null"),
  1 => array('date' => "2013-11-25", 'value' => "null"),
  2 => array('date' => "2013-11-24", 'value' => "null"),
);

$s = array();
$result = array_filter(array_merge($a1, $a2), function($v) use (&$s) {

  return !$s[ $v["date"] ]++;
});