Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pass associative arrays in call_user_func_array(...)

Tags:

php

templating

I'm building a templating system and I'm running in to an issue with calling functions on the fly.

When I try the following:

$args = array(
    4,
    'test' => 'hello',
    'hi'
);

You know.. some numerical elements some associative elements,

call_user_func_array($function, $args);

converts the array to something like this:

$args = array(
    4,
    'hello',
    'hi'
);

Is there any way around this other than passing an array like this:

$args = array(
    4,
    array('test' => 'hello'),
    'hi'
);

Thanks! Matt

like image 795
Matt Avatar asked Mar 31 '10 13:03

Matt


1 Answers

There's nowhere for the array keys to go because:

call_user_func_array($function, $args);

is equivalent to this:

$function(4, 'hello', 'hi');

You could use call_user_func() instead:

call_user_func($function, $args);

then given a function with one argument, you can get the associative array:

function func($args) {
//    $args is complete associative array
}

Note that call_user_func() can also take more than one argument - each will be passed to the called function as an argument.

like image 142
Tom Haigh Avatar answered Oct 12 '22 19:10

Tom Haigh