PHP array_intersect_key但保留array2的值 - php

我有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
        )

)

array_udiff返回不同的结果 - php

我有这段代码来获取两个对象数组之间的区别:$diff = array_udiff($a, $b, function($obj_a, $obj_b) { return $obj_a->id - $obj_b->id; } ); $ a是[ { "id": "7", "attribute":…

PHP-复选框组 - php

我有一个需要发布的表单复选框组。<input type="checkbox" value="true" checked name="chk0[]"> <input type="checkbox" value="false" name=…

如何将字符串转换为数组名称(php)? - php

我有4个数组,每个数组都有一个问题和答案。我想选择一个随机的问题/答案数组。这是我的代码:<?php $query_1 = array("What is two plus three?", "5"); $query_2 = array("What is four plus two?", �…

如何从php中获取datatables jQuery插件的json数据 - php

我是PHP的新手,正在尝试使用Datatables jQuery插件。我知道我必须从.php文件中获取数据,然后在数据表中使用它,但是我似乎无法通过ajax将其传递给数据表。我设法从数据库中获取数据,并对其进行json编码,但是后来我不知道如何在我的index.php文件中调用它,并在其中显示它。我究竟做错了什么?这是我的代码:HTML(已编辑): <…

PHP str_replace是否具有大于13个字符的限制? - php

直到击中第13个字符为止。一旦str_ireplace在cyper数组中击中“ a”,str_ireplace就停止工作。数组的大小有限制吗?请记住,如果键入“ abgf”,我会得到“ nots”,但是如果键入“ abgrf”,我应该得到“ notes”,那么我就会得到“ notrs”。机架使我的大脑无法解决。$_cypher = array("n…