我有一个基于用户输入运行PHP字符串函数的方法。我正在收集用户表单中的所有参数,并将其应用到构建帮助程序并返回数据的方法中。但是,我需要能够在函数构建中将每个数组节点/段输出为单独的字符串。
因此,用户数据收集如下:
2个参数,1个功能,1个主题
参数:“”和“_” 功能:“str_replace” 主题:“本次测试”
将参数收集为最终结果如下的数组:
$parameters(" ", "_")
< - Array
我试图像这样破坏它:
$parameters = "'".implode("','",$parameters)."'";
和此:
$parameters = implode(',',$parameters);
通过给我这个'似乎'来做我需要的事情:
$parameters = " ,_"
或
$parameters = "' ','_'";
但是当我尝试构建PHP字符串函数时,由于参数是单个字符串而不是单独的字符串,它会失败。
我试图将数据返回给用户:
$data = $myFunction($parameters, $subject);
return $data;
我无法在函数调用中运行“循环”,所以我现在正在打砖墙。我如何计算或知道传递了多少参数,以便我可以像他们需要的那样传递它们?
需要(在这种情况下):
$data = $myFunction($parameter1, $parameter2, $subject);
但这会根据所提供的参数和功能而改变。
*编辑*
所以使用var_export,我仍然不知道如何将未知数量的元素插入到函数构建中...
var_export给了我多维数组结果,但我可以通过多种方式获得这些结果。我的问题是尝试将它们插入到函数构建中:
$data = $myFunction( HERE , $subject);
其中'HERE'需要转储...
我需要能够做到这样的事情:
$data = $myFunction(foreach($parameters as $parameter){$parameter.','}, $subject);
(如果这更有意义......)
答案 0 :(得分:0)
答案 1 :(得分:0)
它有一个内置函数来执行此操作:call_user_func_array()
。此函数需要作为第一个参数的所需函数名称和一个以所有参数作为第二个参数的数组。因此,您必须将$subject
附加到$parameters
并以这种方式调用它:
$function = "str_replace";
$subject = "This Test";
$parameters = [ " " , "_" ];
$parameters[] = $subject;
echo call_user_func_array( $function, $parameters );
将输出:
This_Test
我认为你的代码旨在加载多个函数:这个问题的主要问题是你将函数参数划分为两个类别(主题和参数),那么加入它的标准是什么?在提供的情况下很简单,但如果“主题”不是最后一个函数参数,你怎么办?
如果有一个带有两个或更多变量参数的函数?
也许你可以这样做:
$function = "str_replace";
$parameters = [ " " , "_", "" ]; // array with ALL default parameters
$replace = [ 2 ]; // array with index of customizable parameters
$subject = [ "This Test" ]; // array with custom parameters
foreach( $subject as $key => $val )
{
$parameters[ $replace[ $key ] ] = $val;
}
echo call_user_func_array( $function, $parameters );
所以,有这组参数:
$function = "strpos";
$parameters = [ "My Basical Basic Text" , '', 0 ];
$replace = [ 1, 2 ];
$subject = [ 'Basic' ];
调用您的函数,您将获得:“3”(字符串位置为“基本”),同时以这种方式修改$subject
:
$subject = [ 'Basic', 4 ]; //11
您将获得“11”(字符串位置为“基本”)。
另请注意,language constructs不是call_user_func_array()
的{{}}}。