关于我的问题here,Jacob Relkin提出了使用call_user_func_array的绝佳解决方案。这解决了我的问题,但现在我真的很好奇如何在没有这个功能的情况下做到这一点,以便在我原来的问题中实现我想要的东西,以下是参考:
我正在以下列方式创建一个数组数组:
$final_array = array();
for($i = 0; $i < count($elements); $i++) {
for($j = 0; $j < count($elements); $j++) {
if($i!=$j)
$final_array[] = array_intersect($elements[$i], $elements[$j]);
}
}
我试图找出$final_array
变量中所有数组中出现的元素列表。所以我想知道如何将其传递给array_intersect
函数。有人可以告诉我如何使用$final_array[0], $final_array[1], ... $final_array[end_value]
为array_intersect
构建参数吗?或者如果有更好的方法,那也会很棒。
我正在寻找构建以下内容的方法:
array_intersect($final_array[0], $final_array[1], $final_array[2], ...)
答案 0 :(得分:3)
嗯,除了call_user_func_array
之外,唯一真正做到这一点的方法是将implode
生成的数组放入以逗号分隔的参数中,然后执行一些非常非常邪恶的和使用eval
:
$args_imploded = implode(',', $some_array);
$result = eval('return array_intersect(' . $args_imploded . ')');
答案 1 :(得分:2)
为什么不放弃邪恶的评估函数并使用'call_user_func_array'函数?根据我对你的代码的理解,$ final_array参数是一个数组的数组。
$result = call_user_func_array('array_intersect', $final_array);
这里不需要eval功能。
编辑:愚蠢我。我没有正确阅读你的第一段;)。请忽略这一点。