将关联数组传递给PHP中的函数

时间:2013-03-30 16:15:12

标签: php function associative-array

我很想知道是否有某种方法可以使用关联数组来调用函数来声明参数。

例如,如果我有这个功能:

function test($hello, $world) {
    echo $hello . $world;
}

有没有办法称之为做这样的事情?

call('test', array('hello' => 'First value', 'world' => 'Second value'));

我熟悉使用call_user_funccall_user_func_array,但是我正在寻找一些更通用的东西,当我不知道他们在寻找什么参数时,我可以使用它来调用各种方法提前。

编辑: 这样做的原因是为API前端创建单个接口。我接受JSON并将其转换为数组。所以,我想要调用不同的方法,并将JSON输入中的值传递给方法。 由于我希望能够从这个界面调用各种不同的方法,我想要一种方法将参数传递给函数而不需要知道它们需要的顺序。我在想使用反射会得到结果我'我正在寻找。

4 个答案:

答案 0 :(得分:3)

查看call_user_func_array

的php手册

答案 1 :(得分:3)

使用PHP 5.4+,这可以正常工作

function test($assocArr){
  foreach( $assocArr as $key=>$value ){
    echo $key . ' ' . $value . ' ';
  }
}

test(['hello'=>'world', 'lorem'=>'ipsum']);

答案 2 :(得分:2)

您可以在函数func_get_args()

中使用此函数

所以,你可以像这样使用它:

function test() {
     $arg_list = func_get_args();
     echo $arg_list[0].' '.$arg_list[1]; 
}

test('hello', 'world');

答案 3 :(得分:1)

以下内容应该有效......

function test($hello, $world) {
  echo $hello . $world;
}

$callback = 'test'; <-- lambdas also work here, BTW

$parameters = array('hello' => 'First value', 'world' => 'Second value');

$reflection = new ReflectionFunction($callback);
$new_parameters = array();

foreach ($reflection->getParameters() as $parameter) {
  $new_parameters[] = $parameters[$parameter->name];
}

$parameters = $new_parameters;

call_user_func_array($callback, $parameters);