PHP数组方法用于用具有相同键的不同数组值替换内部数组值



我正在尝试了解PHP数组方法,因此ID更喜欢使用数组方法解决此问题。

这是我的数据:

$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'

您可以看到,最终内容值来自$数据。

递归替换做您想要的

$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) 
));

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

最新更新