2010-03-31 17 views
5

Sto costruendo un sistema di template e sto eseguendo un problema con le funzioni di chiamata al volo.Passare array associativi in ​​call_user_func_array (...)

Quando provo il seguente:

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

Sai .. alcuni elementi numerici alcuni elementi associativi,

call_user_func_array($function, $args); 

converte l'array a qualcosa di simile:

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

C'è un modo per aggirare questo oltre il passaggio di un array come questo:

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

Grazie! Matt

+0

Puoi mostrare cosa si sta facendo con '$ args' in' $ function'? La funzione $ –

+0

$ è solo una stringa come 'to_lowercase' o qualcosa .. – Matt

risposta

15

Non c'è nessun posto per le chiavi dell'array di andare perché:

call_user_func_array($function, $args); 

è equivalente a questo:

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

Si potrebbe utilizzare call_user_func() invece:

call_user_func($function, $args); 

poi dato una funzione con un argomento, è possibile ottenere l'array associativo:

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

noti che call_user_func() può anche prendere più di un argomento - ciascuno sarà passato alla funzione chiamata come argomento.

+1

niente altro da aggiungere. cancellando il mio, inviando di nuovo il tuo – Gordon

+0

Oh davvero? Mi sento stupido, so che ho provato call_user_func() prima di decidere su call_user_func_array(), credo che i miei requisiti debbano essere cambiati. Se faccio func_get_args ($ args) restituirà un array dell'array associativo? – Matt

+0

sì, func_get_args() == array ($ args) nell'esempio precedente –

Problemi correlati