PHP计算数组的交集

PHP计算数组的交集,php,Php,数组声明:$uids=Array() 接下来,可以创建或不创建这些阵列: $uids['locations']; $uids['ages']; $uids['genders']; 如果至少创建了两个,我想计算相交。如果所有3个都创建了,我希望所有3个都相交 因此,我可能想计算$uids['locations']和$uids['ages']的交集,或者$uids['ages']和$uids['genders']的交集,等等 如果将所有3个数组都放在数组_intersect中,那么如果其中一个不是

数组声明:
$uids=Array()

接下来,可以创建或不创建这些阵列:

$uids['locations'];
$uids['ages'];
$uids['genders'];
如果至少创建了两个,我想计算相交。如果所有3个都创建了,我希望所有3个都相交

因此,我可能想计算
$uids['locations']
$uids['ages']
的交集,或者
$uids['ages']
$uids['genders']
的交集,等等


如果将所有3个数组都放在数组_intersect中,那么如果其中一个不是数组,则会出现错误。如果没有大量if:else语句,我不知道如何处理这个问题,我认为有更好的方法。

如果您知道您没有比指定的数组键更多的数组键,可以使用以下方法:

$intersect = array();
if (count($uids) > 1) {
    $intersect = call_user_func_array('array_intersect', $uids);
}
否则你可以试试这个:

$_uids = array_intersect_key($uids, array(
    'locations' => 1,
    'ages' => 1,
    'genders' => 1,
));
if (count($uids) > 1) {
    $intersect = call_user_func_array('array_intersect', $_uids);
}

如果您知道没有比指定的数组键更多的数组键,可以使用以下方法:

$intersect = array();
if (count($uids) > 1) {
    $intersect = call_user_func_array('array_intersect', $uids);
}
否则你可以试试这个:

$_uids = array_intersect_key($uids, array(
    'locations' => 1,
    'ages' => 1,
    'genders' => 1,
));
if (count($uids) > 1) {
    $intersect = call_user_func_array('array_intersect', $_uids);
}

@伟大的解决方案,+1!但在这种情况下,我们无法指定哪些物品会被讨厌的人所讨厌。更新answer@soulmerge:oops,sry,我没有看到
\u数组
部分。这是一个非常好的解决方案+1@soulmerge:伟大的解决方案,+1!但在这种情况下,我们无法指定哪些物品会被讨厌的人所讨厌。更新answer@soulmerge:oops,sry,我没有看到
\u数组
部分。这是一个非常好的解决方案+1.