2010-03-31 3 views
5

Je suis en train de construire un système de templates et je suis en train de rencontrer un problème avec les fonctions d'appel à la volée.Passer des tableaux associatifs dans call_user_func_array (...)

Quand je effectuez les opérations suivantes:

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

Vous savez .. certains éléments numériques des éléments associatifs,

call_user_func_array($function, $args); 

convertit le tableau à quelque chose comme ceci:

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

Y a-t-il un moyen de contourner cela autre que de passer un tableau comme celui-ci:

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

Merci! Matt

+0

Pouvez-vous montrer ce qui se fait avec '$ args' dans' $ function'? –

+0

$ function est juste une chaîne comme 'to_lowercase' ou quelque chose .. – Matt

Répondre

15

Il n'y a nulle part pour les clés du tableau pour aller parce que:

call_user_func_array($function, $args); 

est équivalent à ceci:

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

Vous pouvez utiliser call_user_func() à la place:

call_user_func($function, $args); 

alors donné une fonction avec un argument, vous pouvez obtenir le tableau associatif:

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

Notez que call_user_func() peut également prendre plus d'un argument - chacun sera transmis à la fonction appelée comme argument.

+1

rien de plus à ajouter. effaçant le mien, vantant le vôtre – Gordon

+0

Oh vraiment? Je me sens idiot - Je sais que j'ai essayé call_user_func() avant de décider sur call_user_func_array(), je suppose que mes exigences doivent avoir changé. Si je fais func_get_args ($ args) cela retournera-t-il un tableau du tableau associatif? – Matt

+0

ouais, func_get_args() == array ($ args) dans l'exemple ci-dessus –

Questions connexes