通过相同的键和值 PHP 合并数组



如何合并 2 个数组,用相同的键=>值(在我的例子中是"天"(对替换元素。

预期输入:

$array1 = Array
(
Array
(
'day' => '2019-10-19',
'uniques' => 0,
),
Array
(
'day' => '2019-10-20',
'uniques' => 0,
),
Array
(
'day' => '2019-10-21',
'uniques' => 0,
)
);
$array2 = Array
(
Array
(
'day' => '2019-10-19',
'uniques' => 15,
),
Array
(
'day' => '2019-10-21',
'uniques' => 10,
)
);

输出数组应包含所有 array1 元素,替换为 array2 值,其中"day"值相同。

预期输出:

Array
(
[0] => Array
(
[day] => 2019-10-19
[uniques] => 15
)
[1] => Array
(
[day] => 2019-10-20
[uniques] => 0
)
[2] => Array
(
[day] => 2019-10-21
[uniques] => 10
)
)

我尝试了array_replace_recursive((,但它不起作用。

这里的想法是将第一个数组转换为索引数组(按日期使用array_column()(,然后循环第二个数组并随时更新每个值。 然后最后使用array_values()删除密钥...

$a1 = array_column($array1, null, 'day');
foreach ( $array2 as $day ) {
$a1[$day['day']] = $day;
}
print_r(array_values($a1));

完整的解决方案在这里

$array1 = Array
(
Array
(
'day' => '2019-10-19',
'uniques' => 0,
),
Array
(
'day' => '2019-10-20',
'uniques' => 0,
),
Array
(
'day' => '2019-10-21',
'uniques' => 0,
)
);
$array2 = Array
(
Array
(
'day' => '2019-10-19',
'uniques' => 15,
),
Array
(
'day' => '2019-10-21',
'uniques' => 10,
)
);
function uniqueAssocArray($array, $uniqueKey) {
if (!is_array($array)) {
return array();
}
$uniqueKeys = array();
foreach ($array as $key => $item) {
if (!in_array($item[$uniqueKey], $uniqueKeys)) {
$uniqueKeys[$item[$uniqueKey]] = $item;
}
}
return $uniqueKeys;
}
$rr=array_merge($array1,$array2);
$resultArray = uniqueAssocArray($rr, 'day');
print_r($resultArray);

最新更新