1

私は CMS に取り組んでおり、関数の引数のリストを配列に変換する方法を探しています。例えば:

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

$funcname = 'testfunction';
$params = "'this is, parameter 1', 'this is parameter2'";

//This doesnt work, sends both parameters as the first, dont know why.
echo call_user_func($funcname, $params);


//So I want to split the parameter list:
$paramsarray = preg_split('%Complex Regex%', $params);

//And call thusly:
echo call_user_func_array($funcname, $paramsarray);

ここで使用する正規表現の種類がわかりません....「、」で爆発させることもできますが、文字列や配列などに含まれるすべてのコンマを爆発させることになります...これを行うには正規表現が必要です。大丈夫です正規表現を使用しますが、これには多くのルールがあるようです。

4

5 に答える 5

2

あなたが本当に文字列から始めたいのなら(他の人が提案したような配列ではなく)、次のことができると思います:

PHP 5.3 の場合:

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

PHP 5.1/5.2 の場合:

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

print_r($paramsarray);

...そして取得:

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

...次に使用しますcall_user_func_array

より複雑な型 (配列やオブジェクトなど) を使用する場合、それは非常に困難です。おそらくTokenizerを使用する必要があります。

于 2011-05-30T19:33:58.663 に答える
1

これにはfunc_get_argsを使用できますか?

また、call_user_func は次のように呼び出す必要があると思います。

    call_user_func('functionName', $param1, $param2);
于 2011-05-30T19:26:34.010 に答える
1

$params(あなたの場合) type の単一の値を含む単一の変数ですstring。配列やその他の複合型ではありません。私は、あなたも必要ないと思います%Complex Regex%

$funcname = 'testfunction';
$params = "'this is, parameter 1', 'this is parameter2'";

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

echo call_user_func_array($funcname, $params);
于 2011-05-30T19:27:53.197 に答える
1

代わりにcall_user_func_arrayが必要なようです。

$params = array('this is, parameter 1', 'this is parameter2');
$funcname = 'testfunction';

echo call_user_func_array($funcname, $params);
于 2011-05-30T19:28:36.433 に答える
0

call_user_func_array代わりに使用してみてください。

于 2011-05-30T19:26:53.317 に答える