如何用数组元素自动填充函数参数?不定长子数组的多维数组交集求解
用数组元素自动填充函数参数,实现动态子数组的交集计算
刚好之前处理过类似的场景,当子数组数量不固定时,确实没法硬写array_intersect的参数,给你两个实用的方案,按需选择:
方案一:PHP 5.6+ 推荐使用——展开运算符(...)
这个语法是PHP 5.6引入的,能直接把数组拆成函数的独立参数,代码简洁到爆炸:
$list = [ [0,1,2], [2,5], [-1,2] ]; // 不管$list里有10个还是更多子数组,都不用改代码 $intersection = array_intersect(...$list); print_r($intersection);
原理很简单:...$list会把数组中的每个一级子数组,依次作为单独的参数传递给array_intersect,完全替代手动写$list[0], $list[1], ...的麻烦。
方案二:兼容旧版本PHP——call_user_func_array
如果你的项目还在使用PHP 5.5及以下版本,可以用call_user_func_array函数来实现动态传参:
$list = [ [0,1,2], [2,5], [-1,2] ]; // 先处理空数组的边界情况,避免报错 if (empty($list)) { $intersection = []; } else { // 第一个参数是要调用的函数名,第二个参数是参数数组 $intersection = call_user_func_array('array_intersect', $list); } print_r($intersection);
这个函数的作用就是把第二个参数的数组元素,逐个作为参数传递给第一个参数指定的函数,完美适配参数数量不确定的场景。
额外提醒
别忘了处理$list为空的情况哦,不管用哪种方案,如果$list是空数组,直接调用会触发错误,提前判断一下能让代码更健壮。
内容的提问来源于stack exchange,提问作者clarkk
相关产品推荐
相关产品推荐

