1 votos

Convertir lista de Argumentos de Función en un Array

Estoy trabajando en un CMS y estoy buscando una manera de convertir una lista de argumentos de función en un array. Por ejemplo:

function testfunction($param1, $param2){
$string = "Param1: $param1  Param2: $param2";
return $string;
}

$funcname = 'testfunction';
$params = "'esto es, parámetro 1', 'esto es parámetro 2'";

//Esto no funciona, envía ambos parámetros como el primero, no sé por qué.
echo call_user_func($funcname, $params);

//Así que quiero dividir la lista de parámetros:
$paramsarray = preg_split('%Regex complejo%', $params);

//Y llamar así:
echo call_user_func_array($funcname, $paramsarray);

No sé qué tipo de regex usar aquí.... Podría simplemente explotar por ',', pero eso explotaría todas las comas contenidas en cadenas, arrays, etc. Así que necesito un regex para hacer esto, estoy bien con los regex, pero parece que habría muchas reglas en esto.

2voto

netcoder Puntos 31874

Supongo que si realmente quieres empezar desde una cadena (en lugar de un array como sugirieron otros), podrías hacerlo:

En PHP 5.3:

$params = "'this is, parameter 1', 'this is parameter2'";
$paramsarray = str_getcsv($params, ',', "'");

En PHP 5.1/5.2:

$fp = fopen('php://temp', 'w+');
fwrite($fp, $params);
fseek($fp, 0);
$paramsarray = fgetcsv($fp, 0, ',', "'");

print_r($paramsarray);

...y obtener:

Array
(
    [0] => this is, parameter 1
    [1] => this is parameter2
)

...luego usa call_user_func_array.

Si quieres usar tipos más complejos (por ejemplo: arrays u objetos), eso será un verdadero desafío. Probablemente tendrás que usar el Tokenizer.

1voto

stefgosselin Puntos 5880

Tal vez podrías simplemente usar func_get_args para esto?

Además, creo que call_user_func debería ser llamado de la siguiente manera:

    call_user_func('nombreDeLaFuncion', $param1, $param2);

1voto

KingCrunch Puntos 45168

$params es (en tu caso) una variable única, que contiene un único valor de tipo string. No es un array ni ningún otro tipo complejo. Supongo que ni siquiera necesitas tu %Complejo Regex%.

$funcname = 'testfunction';
$params = "'esto es, parámetro 1', 'esto es parámetro2'";

foreach ($params as &$param) $param = trim($param, "' \n\r\t");

echo call_user_func_array($funcname, $params);

1voto

user61779 Puntos 1

Parece que quieres call_user_func_array en lugar.

$params = array('este es, parámetro 1', 'este es el parámetro 2');
$funcname = 'testfunction';

echo call_user_func_array($funcname, $params);

0voto

Nev Stokes Puntos 3162

Intenta tal vez usar call_user_func_array en su lugar.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X