2009-09-23 7 views
6

Quiero usar valores en una matriz como argumentos independientes en una llamada a función. Ejemplo:Convierta la matriz en argumentos de funciones independientes - ¿cómo?

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

Se desconoce el número de valores en la matriz.

soluciones posibles:

  1. me puede pasar la matriz como un solo argumento - pero preferiría pasar como argumentos de la función múltiples, independientes.

  2. implode() la matriz en una secuencia separada por comas. (Falla porque es sólo una cuerda.)

  3. El uso de un solo parámetro:

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

  5. ¿Recorrer la matriz?

Las sugerencias son apreciadas. Gracias.

+0

"son desconocidos, el número de valores de la matriz." - ¿Al menos se sabe que coinciden con la lista de argumentos de la firma de la función? – grantwparks

Respuesta

1

lista intento()

// 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

No * técnicamente * correcto (call_user_func_array es como se supone que debe hacer este tipo de comportamiento, pero esto es muy inteligente. +1 – cwallenpoole

+0

Buena sugerencia. Puede utilizar una llamada a función estándar (sin call_user_func_array) que mantiene el código limpio. El único inconveniente es que esa lista requiere que codifique los argumentos ... lista ($ a, $ b) ... mientras que no hago la cantidad de valores de matriz por adelantado. –

+0

Estaba pensando en 'list() 'cuando estaba buscando esta pregunta, pero no permite una cantidad infinita de parámetros, ¿verdad? –

17

si he entendido bien:

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

Exactamente. Gracias. –

Cuestiones relacionadas