2012-01-28 11 views
12

Tengo un problema realmente simple en mi script PHP. Hay una función definida que tiene longitud variable lista de argumentos:PHP - Pase array como lista de argumentos de longitud variable

function foo() { 
    // func_get_args() and similar stuff here 
} 

Cuando lo llamo así, funciona muy bien:

foo("hello", "world"); 

Sin embargo, tengo mis variables en la matriz y Necesito pasarlos "por separado" como argumentos únicos a la función. Por ejemplo:

$my_args = array("hello", "world"); 
foo(do_some_stuff($my_args)); 

¿Hay alguna función do_some_stuff que divide los argumentos para mí, así que les puede pasar a la función?

+0

posible duplicado de [Pasar una matriz como argumentos, no una matriz, en PHP] (http://stackoverflow.com/questions/744145/passing-an-array-as-arguments-not-an-array-in -php) – DanMan

Respuesta

2

me suena como que busca call_user_func_array.

+0

Gracias por la respuesta, es exactamente lo que necesito. Sin embargo, puedo aceptar solo una respuesta. –

+0

Simplemente acepte el que proporciona el detalle más requerido o el más antiguo :) –

0

Si puede cambiar el código de foo() que debe ser fácil de resolver esto en un solo lugar.

function foo() 
{ 
    $args = func_get_args(); 
    if(count($args) == 1 && is_array($args[0])) 
    { 
     $args = $args[0] 
    } 
    // use $args as normal 
} 
+0

Esto no funciona si quiere pasar una matriz (de verdad) como primer argumento. –

+0

No, no funciona si solo hay un argumento y ese argumento se supone que es una matriz. Si hay más de un argumento, entonces se quedan solos. – Arjan

+0

Sí, vi, vi ... –

0

Esta solución no se recomienda en absoluto, sino simplemente mostrar una posibilidad:

Usando eval

eval ("foo('" . implode("', '", $args_array) . "')");

+1

Sé que solo está "mostrando una posibilidad", pero aún ... es eval. ;) – Crozin

Cuestiones relacionadas