1

我想检查,如果数组 A 包含数组 B 中的所有项目(可能包含其他项目,但必须包含所有项目),当两个数组都是多维的,即可以包含不同的变量类型。

我见过很多(特别是这个这个这个这个这个这个,还有这个这个这个)。我读过 PHP 文档。我检查的所有内容都因“数组到字符串转换”通知而失败。尤其是文使用array_intersect()or array_diff()

我正在使用严格的错误检查,因此通知实际上可以进一步执行整个脚本并且是我通常不喜欢并且想要避免的东西。在这种情况下可能吗?

我的数组 A 是:

Array
(
    [0] => content/manage/index
    [Content] => Array
        (
            [title] => 
            [type] => 5
            [category] => 
            [recommended] => 
            [featured] => 
            [status] => 
            [views] => 
            [last_access_date] => 
            [creation_date] => 
            [modification_date] => 
            [availability_date] => 
            [author_id] => 
        )

)

我的数组 B 是:

Array
(
    [0] => /content/manage/index
    [Content] => Array
        (
            [type] => 1
        )

)

那么,如果我可以array_intersect在包含不同变量类型的多维数组上使用而不引起注意,我有什么办法吗?

4

1 回答 1

0

我的问题(和疑问)源于误解,即“数组到字符串转换”通知的真正含义。就我而言,它试图告诉我,我正在尝试使用旨在用于单维数组的函数来遍历多维数组。

理解这一点让我在几秒钟内找到了解决方案。这里有很多,在 SO 上,但deceze 在这里给出的那个看起来对我来说是最好的。所以我将它采用为这样的函数形式:

function recursiveArrayIntersect($array1, $array2)
{
    $array1 = array_intersect_key($array1, $array2);

    foreach($array1 as $key=>&$value)
    {
        if(is_array($value)) $value = recursiveArrayIntersect($value, $array2[$key]);
    }

    return $array1;
}

我在我的项目和编码方式中采用了它,但所有的功劳仍然归于 deceze 他的回答在这里)!

现在我可以找到几乎任何数组的交集,不管它包含什么样的变量类型,也不管它有多深(它包含多少子数组)。

于 2013-09-23T06:52:05.433 回答