"no", "c" => "no", "d" => ["y" => "no"]]; $array2 = ["a" => "yes", "b" =-6ren">
gpt4 book ai didi

PHP array_intersect_key 但保留 array2 中的值

转载 作者:行者123 更新时间:2023-12-03 19:31:02 26 4
gpt4 key购买 nike

我有 2 个数组:

$array1 = ["b" => "no", "c" => "no", "d" => ["y" => "no"]];
$array2 = ["a" => "yes", "b" => "yes", "c" => "yes", "d" => ["x" => "yes", "y" => "yes", "z" => "yes"]];

我想返回 $array2 的成员,其键也存在于 $array1 中。

期望的输出:

$array3 = ["b" => "yes", "c" => "yes", "d" => ["y" => "yes"]];

基本上我需要与 array_intersect_key 相同的功能但我想保留 $array2 的值,而不是 $array1

有这样的功能吗?还需要递归到子数组中。谢谢!

*编辑*正如 Andri 在 his comment 中所建议的那样,我试图翻转围绕 array_intersect_key($array2, $array1) 的参数,但在那种情况下我实际得到的是:

$array3 = ["b" => "yes", "c" => "yes", "d" => ["x" => "yes", "y" => "yes", "z" => "yes"]];

所有“d”的子级,只是因为在 $array1 中提到了“d”。

最佳答案

据我所知,没有内置函数,使用递归处理所有层的方法应该足够简单......

$array1 = ["b" => "no", "c" => "no", "d" => ["y" => "no"]];
$array2 = ["a" => "yes", "b" => "yes", "c" => "yes", "d" => ["x" => "yes", "y" => "yes", "z" => "yes"]];

function intersect_key_2 ( array $a1, array $a2 ) {
foreach ( $a1 as $key1 => $value1) {
// If there is a matching element
if ( isset($a2[$key1]) ) {
// Update - if an array, use recursive call else just replace
$a1[$key1] = ( is_array($value1) ) ? intersect_key_2 ( $value1, $a2[$key1])
: $a2[$key1];
}
}

return $a1;
}

print_r(intersect_key_2($array1, $array2));

给予

Array
(
[b] => yes
[c] => yes
[d] => Array
(
[y] => yes
)

)

关于PHP array_intersect_key 但保留 array2 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59107175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com