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