当在另一个二维数组中找到相关数据时,覆盖二维数组中的行数据

问题描述 投票:0回答:3

我有

Array_A ( [0] => Array ( [DATE] => 2012-11-28 , [totalCount] => )
          [1] => Array ( [DATE] => 2012-11-29 , [totalCount] => )
          [2] => Array ( [DATE] => 2012-11-30 , [totalCount] => ) )

Array_B ( [10] => Array ( [DATE] => 2012-11-28 , [totalCount] => 30 )
          [11] => Array ( [DATE] => 2012-11-30 , [totalCount] => 40 )
          [12] => Array ( [DATE] => 2012-12-05 , [totalCount] => 50 ) )

如果我需要将 Array_A 替换为 Array_B 中的值并且输出应该是

,该怎么办?
Array_A ( [0] => Array ( [DATE] => 2012-11-28 , [totalCount] => 30 )
          [1] => Array ( [DATE] => 2012-11-29 , [totalCount] =>    )
          [2] => Array ( [DATE] => 2012-11-30 , [totalCount] => 40 ) )
php arrays multidimensional-array merging-data
3个回答
3
投票

我刚刚注意到您只想使用

array_a
中的键的部分,这个循环就可以了。

foreach($array_a as $key => $value){
    if (array_key_exists($key, $array_b){
        $result[$key] = $array_b[$key]; 
    } else {
        $result[$key] = null;
    }
}

或者,如果您希望在

array_a
中的键不存在时使用
array_b
的值,只需将
else
子句中的语句替换为:
$result[$key] = $value;


2
投票

尝试

$result = array_merge_recursive($Array_A, $Array_B);
print_r($result);

0
投票

您的 a 和 b 数组具有相同的结构,因此不必在另一列匹配时有条件地更新一列,只需在查找数组中找到标识列时替换整行即可。 演示

$map = array_column($b, null, 'DATE');

var_export(
    array_map(
        fn($row) => $map[$row['DATE']] ?? $row,
        $a
    )
);

输出:

array (
  0 => 
  array (
    'DATE' => '2012-11-28',
    'totalCount' => 30,
  ),
  1 => 
  array (
    'DATE' => '2012-11-29',
    'totalCount' => NULL,
  ),
  2 => 
  array (
    'DATE' => '2012-11-30',
    'totalCount' => 40,
  ),
)
© www.soinside.com 2019 - 2024. All rights reserved.