我正在研究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);
我不知道在这里使用什么样的正则表达式.... 我可以通过','爆炸,但这会爆炸包含在字符串,数组等中的所有逗号...所以我需要一个正则表达式来执行此操作,我对正则表达式很好,但似乎会有很多规则在这。
答案 0 :(得分: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。
答案 1 :(得分:1)
也许您可以只使用func_get_args吗?
另外,我认为应该像这样调用call_user_func:
call_user_func('functionName', $param1, $param2);
答案 2 :(得分:1)
$params
是(在您的情况下)单个变量,它包含单个值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);
答案 3 :(得分:1)
听起来你想要call_user_func_array。
$params = array('this is, parameter 1', 'this is parameter2');
$funcname = 'testfunction';
echo call_user_func_array($funcname, $params);
答案 4 :(得分:0)
尝试使用call_user_func_array
代替。