合并数组

时间:2016-09-25 12:15:31

标签: php multidimensional-array

我有两个数组$array$array2。我需要代表公共密钥值即entry_id合并它们。 好吧,我需要合并它们是这样一种方式,如果数组1的entry_id与array2的entry_id匹配,它就会合并。如果entry_id不匹配,则该数组保持不变,但应该在合并数组中输入。我尝试过,但我没有得到预期的结果。如果没有功能可以这样做吗?

先谢谢。

这是我的代码

 <?php

$array = array(
    array(
        'title' => 'mytitleeee',
        'entry_id' => 1000
        ),
    array(  
        'title' => 'myt',
        'entry_id' => 1001
        ),
    array(  
        'title' => 'mytRRRR',
        'entry_id' => 1003
        ),
    array(  
        'title' => 'RUKES',
        'entry_id' => 1004
        )   
    );

$array2 = array(
    array(
        'author_id' => 'desc1',
        'entry_id' => 1000
    ),
    array(
        'author_id' => 'desc2',
        'entry_id' => 1001
    ),
    array(
        'author_id' => 'desc3',
        'DAY' => 'MON',
        'entry_id' => 1003
    ),
    array(
        'author_id' => 'desc7',
        'DAY' => 'TUE',
        'entry_id' => 1012
    )

);  
$x = array();
foreach($array as $value => $ans){

}   
foreach($array2 as $value1 => $ans1){

}   
if($ans1['entry_id']!= $ans['entry_id']){
    $x = ($ans1);
    echo"<pre>";
    print_r($x);

}

1 个答案:

答案 0 :(得分:0)

您可以将此array_reduce来电应用于array_merge结果:

$result = array_reduce(array_merge($array, $array2), function ($acc, $el) {
    $key = $el['entry_id'];
    $acc[$key] = isset($acc[$key]) ? $acc[$key] + $el : $el;
    return $acc;
}, []);

$result将为您的示例数据提供以下内容:

array (
  1000 => array (
    'title' => 'mytitleeee',
    'entry_id' => 1000,
    'author_id' => 'desc1',
  ),
  1001 => array (
    'title' => 'myt',
    'entry_id' => 1001,
    'author_id' => 'desc2',
  ),
  1003 => array (
    'title' => 'mytRRRR',
    'entry_id' => 1003,
    'author_id' => 'desc3',
    'DAY' => 'MON',
  ),
  1004 => array (
    'title' => 'RUKES',
    'entry_id' => 1004,
  ),
  1012 => array (
    'author_id' => 'desc7',
    'DAY' => 'TUE',
    'entry_id' => 1012,
  ),
)

如何运作

首先合并两个数组:

array_merge($array, $array2)

这只是将第二个数组的元素追加到第一个数组的元素之后。

然后将此数组传递给array_reduce,它为每个元素调用回调函数 - 作为参数给出。

此外,该函数还获得累积值($acc),其在第一次调用中为[](作为reduce的最终参数提供)。无论函数返回什么,都会成为在第二个函数调用中传递的累计值(对于第二个元素),...等。最终返回的值将成为reduce的返回值。

因此,在这种情况下,累计值是由entry_id键控的关联数组。如果在某个时刻该密钥已经存在,则当前值将与$acc中已有的值合并:此合并是使用+运算符完成的。如果当前元素的entry_id尚未加入$acc,则会将其添加到其中。

if...else是使用三元运算符(... ? ... : ...)实现的。

return $ acc statement ensures that the the next time this callback is called (for the next element), $ acc`再次是累计值。