CakePHP:如何使用Set::contains将数组子集与给定数组进行比较?

CakePHP:如何使用Set::contains将数组子集与给定数组进行比较?,php,cakephp,Php,Cakephp,我有以下数组,名为$usergrouppermissions: Array ( [0] => Array ( [UserGroupPermission] => Array ( [group_id] => 1 [permission_id] => 4 ) )

我有以下数组,名为$usergrouppermissions:

Array
(
    [0] => Array
        (
            [UserGroupPermission] => Array
                (
                    [group_id] => 1
                    [permission_id] => 4
                )

        )

    [1] => Array
        (
            [UserGroupPermission] => Array
                (
                    [group_id] => 1
                    [permission_id] => 5
                )

        )

    [2] => Array
        (
            [UserGroupPermission] => Array
                (
                    [group_id] => 1
                    [permission_id] => 6
                )

        )

    [3] => Array


[...]
在一个循环中,我构建了另一个类似这样的数组,名为$searchme:

Array
(
    [UserGroupPermission] => Array
        (
            [permission_id] => 1
            [group_id] => 1
        )

)
现在,我想检查上面给定的数组是否存在于顶部的数字索引数组中。我现在这样做:

$result = Set::contains($usergrouppermissions, $searchme);

结果总是错误的。我这里有什么不对劲吗?有什么问题吗?

因为PH4.2的阵列也可以使用阵列作为针头。因此,解决方案是:

in_array($searchme, $usergrouppermissions)

我知道我的回答已经很晚了,但不管怎么说,这是为子孙后代准备的:)

蛋糕的方式是:

$exists = Set::matches
    (
        sprintf
        (
            '/UserGroupPermission[group_id=%s][permission_id=%s]',
            $searchme['UserGroupPermission']['group_id'],
            $searchme['UserGroupPermission']['permission_id']
        ),
        $usergrouppermissions
    );
如果您查看一下
Set::contains()
的代码,就会发现它不能很好地处理嵌套的contains(至少在您的情况下不是这样)

Set::matches()
基本上只需使用给定的XPath条件调用
Set::extract()
,并将结果转换为bool值