Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

I have a variable length array that I need to transpose into a list of parameters for a function.

I hope there is a neat way of doing this - but I cannot see how.

The code that I am writing will be calling a method in a class - but I will not know the name of the method, nor how many parameters it has.

I tried this - but it doesn't work:

$params = array(1 => "test", 2 => "test2", 3 => "test3");
ClassName::$func_name(implode($params, ","));

The above lumps all of the values into the first parameter of the function. Whereas it should be calling the function with 3 parameter values (test, test2, test3).

What I need is this:

ClassName::$func_name("test", "test2", "test3");

Any ideas how to do this neatly?

share|improve this question

2 Answers 2

up vote 19 down vote accepted

Yes, use call_user_func_array():

call_user_func_array('function_name', $parameters_array);

You can use this to call methods in a class too:

class A {
  public function doStuff($a, $b) {
    echo "[$a,$b]\n";
  }
}

$a = new A;
call_user_func_array(array($a, 'doStuff'), array(23, 34));
share|improve this answer
    
Cletus - Thanks!! This worked a treat. I hope all the hair I pulled out will grow back :-) –  Byrl Nov 25 '09 at 0:13
    
Meanwhile using Python : function_name(*parameters_array)... I really got to love PHP. –  Loïc Jun 13 at 19:03

You could use eval:

  eval("$func_name(" . implode($params, ",") . ");");

Though you might need to do some lambda trickery to get your parameters quoted and/or escaped:

  $quoted_escaped_params = array_map(create_function('$a', 'return "\"". str_replace("\"",` "\\\"", $a) . "\""'), $params);
share|improve this answer
    
Yeah - Thanks Frank! I tried this but got bogged down with the quoting of the array values. bit messy... –  Byrl Nov 25 '09 at 0:12

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.