我正在尝试理解PHP数组方法,因此我更喜欢使用数组方法来解决这个问题。
这是我的数据:
$dataA =>
array
0 =>
array
'type' => string 'name' (length=4)
'key' => string 'keywords' (length=8)
'content' => string 'keywordA' (length=14)
$dataB =>
array
1 =>
array
'type' => string 'name' (length=4)
'key' => string 'keywords' (length=8)
'content' => string 'keywordB' (length=14)
我想要做的是将两个数组合并,最后content
键为:
$finalData =>
array
0 =>
array
'type' => string 'name' (length=4)
'key' => string 'keywords' (length=8)
'content' => string 'keywordB' (length=14)
^-- notice here that the content has changed based on the fact that 'key' for both is 'keywords'
如您所见,最终内容值来自$ dataB。
答案 0 :(得分:0)
复制$dataB
,然后循环$dataA
。如果$dataA
中未找到$dataB
的值,请将其添加到您的副本中。
答案 1 :(得分:0)
递归替换做你想要的
$finalData = array_replace_recursive($dataA, $dataB);
对于这个特定的例子,plus运算符也可以做你想做的事情:
$finalData = $dataB + $dataA;
但你必须以不同的顺序指定参数。
没有这样的内置功能。你需要一些东西来替换一个特定的密钥,只有当其他密钥在第二个数组中它是等价的时候,而且在零索引密钥中存在关联数组,你需要只在二级比较项目。如果您在描述后查看它,您可能会注意到它不是每个人都需要的一般功能,因此它不包含在标准功能集中。
假设每个数组的key
值是唯一的,这里是没有可见循环的解决方案:
$getKey = function($item){ return $item['key']; };
$keysA = array_map($getKey, $dataA);
$keysB = array_map($getKey, $dataB);
$finalData = array_values(array_replace_recursive(
array_combine($keysA, $dataA),
array_combine($keysB, $dataB)
));