将函数参数列表转换为数组



我正在开发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);

我不知道在这里使用哪种正则表达式。。。。我可以用","来分解,但这会分解字符串、数组等中包含的所有逗号。所以我需要一个正则表达式来完成这项工作,我对正则表达式没意见,但这里面似乎有很多规则。

我想如果你真的想从字符串开始(而不是像其他人建议的那样从数组开始),你可以这样做:

在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
)

则使用CCD_ 1。

如果您想使用更复杂的类型(例如:数组或对象),这将是一个真正的挑战。您可能需要使用令牌化器。

也许您可以使用func_get_args来实现这一点?

此外,我认为call_user_func应该这样调用:

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

$params(在您的情况下)是一个单独的变量,它包含一个类型为string的值。它的不是数组或任何其他复杂类型。我想,你甚至不需要你的%Complex Regex%

$funcname = 'testfunction';
$params = "'this is, parameter 1', 'this is parameter2'";
foreach ($params as &$param) $param = trim($param, "' nrt");
echo call_user_func_array($funcname, $params);

听起来你想要call_user_func_array。

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

尝试使用call_user_func_array

相关内容

  • 没有找到相关文章

最新更新