我有两个数组$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);
}
答案 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`再次是累计值。