2009-09-23 7 views
6

Je souhaite utiliser des valeurs dans un tableau en tant qu'arguments indépendants dans un appel de fonction. Exemple:Transformer tableau en arguments de fonction indépendants - howto?

// 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}"; } 

Le nombre de valeurs dans le tableau est inconnu.

solutions possibles:

  1. je peux passer le tableau comme un seul argument - mais préférerait passer pour de multiples arguments de fonction indépendants.

  2. implode() le tableau dans une chaîne séparée par des virgules. (Ne réussit pas parce qu'il est juste une chaîne.)

  3. L'utilisation d'un seul paramètre:

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

  5. Traverser le tableau?

Suggestions sont appréciées. Merci.

+0

« Le nombre de valeurs dans le tableau ne sont pas connus. » - Sont-ils au moins connus pour correspondre à la liste d'arguments de la signature de la fonction? – grantwparks

Répondre

1

liste try()

// 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}"; } 
+0

Non * techniquement * correct (call_user_func_array est la façon dont vous êtes censé faire ce type de comportement, mais c'est très intelligent +1 – cwallenpoole

+0

Bonne suggestion Vous pouvez ensuite utiliser un appel de fonction standard (sans call_user_func_array) qui garde le code propre. Le seul écueil est que cette liste nécessite de coder en dur les arguments ... list ($ a, $ b) ... alors que je n'ai pas le nombre de valeurs de tableau à l'avance –

+0

Je pensais à 'list() 'quand je regardais cette question, mais il ne permet pas une quantité infinie de paramètres, le fait? –

17

si je vous comprends bien:

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

Exactement Merci. –

0

Vous pouvez le faire en utilisant call_user_func_array(). Il fonctionne à merveille (et même avec les fonctions lambda depuis PHP 5.3).

Questions connexes