PHP - 传递数组作为可变长度参数列表
我的PHP脚本中有一个非常简单的问题。有这需要可变长度参数列表定义的函数:PHP - 传递数组作为可变长度参数列表
function foo() {
// func_get_args() and similar stuff here
}
当我这样称呼它,它工作得很好:
foo("hello", "world");
但是,我有我的数组变量和我需要将它们“分开”作为函数的单个参数传递给它们。例如:
$my_args = array("hello", "world");
foo(do_some_stuff($my_args));
是否有任何do_some_stuff功能,拆分论据我,所以我可以将它们传递给函数?
使用
或
+1反射'。尽管这里像是过度杀伤,但处理它们总是很酷! – dfsq 2012-01-28 13:00:21
谢谢,您的解决方案都能完美解决我的问题。 – 2012-01-28 13:08:30
http://www.php.net/manual/en/functions.arguments.php#functions.variable-arg-list
这不是你想要的吗?
编辑 啊......好的...这个怎么样: Passing an Array as Arguments, not an Array, in PHP
没有。我已经读过这个。所有的功能都应该在我的“foo”功能中起作用。在传递给函数之前,我需要分离参数。 – 2012-01-28 12:56:05
听起来好像你正在寻找call_user_func_array
。
感谢您的回答,这正是我需要的。但是,我只能接受一个答案。 – 2012-01-28 12:59:36
只要接受那个提供最需要的细节,或最早的一个:) – 2012-01-28 13:05:20
那么你需要call_user_func_array
call_user_func_array('foo', $my_args);
感谢您的答案,这正是我需要的。但是,我只能接受一个答案。 – 2012-01-28 13:03:50
如果你可以改变的foo()
代码应该很容易在一个地方来解决这个问题。
function foo()
{
$args = func_get_args();
if(count($args) == 1 && is_array($args[0]))
{
$args = $args[0]
}
// use $args as normal
}
如果他想传递一个数组(作为第一个参数),这不起作用。 – 2012-01-28 13:00:19
不,如果只有一个参数并且该参数应该是一个数组,它就不起作用。如果有不止一个论点,那么他们都是孤立的。 – Arjan 2012-01-28 13:04:13
是的,我看到了,我看到了... – 2012-01-28 13:05:28
您正在搜索call_user_func_array()
。
http://it2.php.net/manual/en/function.call-user-func-array.php
用法:
$my_args = array("hello", "world");
call_user_func_array('foo', $my_args);
// Equivalent to:
foo("hello", "world");
不建议在所有的这种解决方案,而只是呈现出可能性:
使用eval
eval ("foo('" . implode("', '", $args_array) . "')");
我知道它只是“显示一种可能性”,但仍然是...这是eval。 ;) – Crozin 2012-01-28 13:12:17
[传递数组作为参数,而不是一个阵列,在PHP]的可能重复(http://stackoverflow.com/questions/744145/passing-an-array-as-arguments-not-an-array-in -php) – DanMan 2014-02-18 14:31:03