2009-09-23 12 views
6

Chcę używać wartości w tablicy jako niezależne argumenty w wywołaniu funkcji. Przykład:Zamień tablicę na niezależne argumenty funkcji - 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}"; } 

Liczba wartości w tablicy jest nieznana.

Możliwe rozwiązania:

  1. można przekazać tablicę jako pojedynczy argument - ale wolałbym, aby przekazać jak wielu, niezależnych argumenty funkcji.

  2. implode() Tablica w łańcuchu oddzielonym przecinkami. (Nie działa, ponieważ jest to tylko jeden ciąg.)

  3. Korzystanie jeden parametr:

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

  5. Przechodzenie przez tablicę?

Sugestie są mile widziane. Dzięki.

+0

- czy są one przynajmniej znane z listy arg argumentu funkcji? – grantwparks

Odpowiedz

1

lista 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

Nie * technicznie * poprawne (call_user_func_array to sposób, w jaki należy tego typu zachowanie, ale jest to bardzo sprytne +1 – cwallenpoole

+0

Dobra sugestia Możesz następnie użyć standardowego wywołania funkcji (bez argumentu call_user_func_array), który utrzymuje kod w czystości. Jedyną pułapką jest to, że lista wymaga twardego zakodowania argumentów ... list ($ a, $ b) ... podczas gdy ja nie liczę z góry wartości tablicowych –

+0

Myślałem o 'list() 'gdy szukałem tego pytania, ale nie pozwala na nieskończoną ilość parametrów, czy to? –

17

jeśli cię rozumiem poprawnie:

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

Dokładnie. –