0

我试图理解 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。

4

2 回答 2

0

制作 的副本$dataB,然后循环播放$dataA。如果在$dataA中找不到 的值$dataB,请将其添加到您的副本中。

于 2012-11-11T14:02:39.427 回答
0

递归替换做你想要的

$finalData = array_replace_recursive($dataA, $dataB);

对于这个特定的例子,加号运算符也会做你想做的事:

$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) 
));
于 2012-11-11T14:12:49.760 回答