22

I want to use values in an array as independent arguments in a function call. Example:

// Values "a" and "b"
$arr = array("alpha", "beta");
// ... are to be inserted as $a and $b.
my_func($a, $b)
function my_func($a,$b=NULL) { echo "{$a} - {$b}"; }

The number of values in the array are unknown.

Possible solutions:

  1. I can pass the array as a single argument - but would prefer to pass as multiple, independent function arguments.

  2. implode() the array into a comma-separated string. (Fails because it's just one string.)

  3. Using a single parameter:

    $str = "'a','b'";
    function goat($str);  // $str needs to be parsed as two independent values/variables.
    
  4. Use eval()?

  5. Traverse the array?

Suggestions are appreciated. Thanks.

1
  • "The number of values in the array are unknown." -- are they at least known to match the function signature's arg list? Commented Sep 23, 2009 at 17:26

4 Answers 4

36

This question is fairly old but there is finally more direct support for this in PHP 5.6+:

http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list.new

$arr = array("alpha", "beta");
my_func(...$arr);
Sign up to request clarification or add additional context in comments.

Comments

27

if I understand you correctly:

$arr = array("alpha", "beta");
call_user_func_array('my_func', $arr);

Comments

0

try list()

// Values "a" and "b"
$arr = array("alpha", "beta");
list($a, $b) = $arr;
my_func($a, $b);

function my_func($a,$b=NULL) { echo "{$a} - {$b}"; }

4 Comments

Not technically correct (call_user_func_array is how you are supposed to do this type of behavior, but this is very clever. +1
Good suggestion. You can then use a standard function call (without call_user_func_array) which keeps the code clean. The only pitfall is that list requires you to hard-code the arguments ... list($a, $b) ... while I don't the number of array values in advance.
I was thinking about list() when I was looking this question up, but it doesn't allow for an infinite amount of parameters, does it?
The number of elements in the array is unknown, so it is not a universal solution.
0

You can do that using call_user_func_array(). It works wonders (and even with lambda functions since PHP 5.3).

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.