2010-03-31 10 views
5

Estoy construyendo un sistema de plantillas y estoy corriendo un problema al llamar funciones sobre la marcha.Pasar matrices asociativas en call_user_func_array (...)

Cuando intento el siguiente:

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

Usted sabe .. algunos elementos numéricos algunos elementos asociativos,

call_user_func_array($function, $args); 

convierte la matriz a algo como esto:

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

¿Hay alguna forma de evitar esto que pasar una matriz como esta:

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

Gracias! Matt

+0

¿Puedes mostrar lo que se está haciendo con '$ args' en' $ function'? –

+0

$ función es solo una cadena como 'to_lowercase' o algo así ... – Matt

Respuesta

15

No hay lugar para las claves de matriz que ir porque:

call_user_func_array($function, $args); 

es equivalente a esto:

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

usted podría utilizar call_user_func() lugar:

call_user_func($function, $args); 

continuación, dada una función con un argumento, puede obtener la matriz asociativa:

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

Tenga en cuenta que call_user_func() también puede tomar más de un argumento - cada uno se pasa a la función denominada como argumento.

+1

nada más que agregar. eliminando el mío, votando el tuyo – Gordon

+0

¿De verdad? Me siento tonto, sé que probé call_user_func() antes de decidir call_user_func_array(), supongo que mis requisitos deben haber cambiado. Si hago func_get_args ($ args), ¿devolverá una matriz de la matriz asociativa? – Matt

+0

sí, func_get_args() == matriz ($ args) en el ejemplo anterior –

Cuestiones relacionadas