调用具有可变数量参数的函数?

时间:2010-11-05 07:28:29

标签: php

关于我的问题hereJacob Relkin提出了使用call_user_func_array的绝佳解决方案。这解决了我的问题,但现在我真的很好奇如何在没有这个功能的情况下做到这一点,以便在我原来的问题中实现我想要的东西,以下是参考:

Original Question:

我正在以下列方式创建一个数组数组:

$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], ...)

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功能。

编辑:愚蠢我。我没有正确阅读你的第一段;)。请忽略这一点。