如何拆分含子数组的大数组以适配PHP array_intersect函数?
嘿,这个场景我碰到过好多次啦,PHP里有两种很实用的方法能搞定,看你用的PHP版本选就行:
方法1:PHP 5.6+用可变参数展开(推荐)
从PHP 5.6开始,新增的...展开运算符简直是为这种需求量身定做的!它能直接把大数组里的每个子数组拆成array_intersect的独立参数,代码简洁到爆炸:
$bigArray = [$array_one, $array_two, $array_three, ....]; $intersect = array_intersect(...$bigArray);
这么写的效果和你手动敲array_intersect($array_one, $array_two, $array_three, ....)完全一致,而且不管$bigArray里有多少个子数组,都能自动适配,超级灵活。
方法2:兼容旧版本的call_user_func_array
如果你的项目还在跑PHP 5.5及更早的版本,那就用call_user_func_array函数,它的作用就是把数组转换成函数的参数列表:
$bigArray = [$array_one, $array_two, $array_three, ....]; $intersect = call_user_func_array('array_intersect', $bigArray);
这个函数会调用array_intersect,并把$bigArray里的每个子数组依次作为它的参数传入,最终得到所有子数组的交集。
小提醒
- 要是
$bigArray里有某个子数组是空的,那最终的交集结果肯定也是空数组(毕竟空数组和任何数组的交集都是空),所以记得确保子数组都有效哦。 - 如果你的需求是对比数组的键而不是值,只需要把
array_intersect换成array_intersect_key就行,两种方法的用法完全一样~
内容的提问来源于stack exchange,提问作者Soliman Mahmoud Soliman
相关产品推荐
相关产品推荐

