我已经grepped了一个PHP文件,这是传递给函数的参数的字符串,字符串的的var_dump看起来像这样传递一个字符串作为参数
'foo bar', ['name' => 'John, Smith']
什么,我会喜欢做的事就是把它作为两个参数传递给一个函数。如果在数组中不存在a的机会,那么我可以分解字符串并将两个参数传递给该函数。但我不能也不需要正确解析字符串。
我可以通过调用eval来解决这个问题。
eval("myfunction({$string});");
这会工作,但使用eval是“有风险的”。有没有一个本地方法来传递一个字符串,将它分成一个参数数组,然后我可以传递给我的函数?
我不能运行这个其他的PHP文件,或者改变它的代码,我只想grep出参数(我已经完成),然后将这些参数传递给我自己的函数。
编辑:
因此,这是greped可以改变的字符串,我为它的代码需要(后”,‘或’或“无空格)来处理编写PHP参数的最方式。它始终是一个字符串数组,这是从文本中提取
因此,这将需要支持之类的东西。
"foo",['name' => 'John, Smith']
"foo",[]
"foo, bar", [1,2 ,3]
有点像一个反向var_export ... var_import :)
所以,它似乎是使用eval的最好方法...代码是“可信”的,但仍然觉得这是一种肮脏的方式来做到这一点,并认为会有像parse_str或parse_url这样的方法。
编辑2:
所以基本上,twofiles。 a.txt被打开,正则表达式在函数中抓取参数。文件b.php运行正则表达式,然后需要处理该字符串以传递给不同的函数。
a.txt无法更改为一个php文件。需要运行该代码。 (eval如上所述)。
File a.txt
<?php
... something ...
$result = resetResult('foo bar', ['name' => 'John, Smith']);
.. something ...
?>
File b.php
<?php
$fileContents = file_get_contents('a.txt');
preg_match_all('/resultResult\((.*?)\)/', $fileContents, $matches);
foreach($matches[1] as $args) {
// args = 'foo bar', ['name' => 'John, Smith'] but as a string.
// need to split args so 'foo bar' can be passed as first argument, and the array as the second argument..
someFunction($args[0], $args[1]);
}
所以你的字符串不会总是有','? – Darren 2015-04-01 00:01:51
我们需要更多关于您已经从文件中删除的字符串格式的信息。每次grep时它会保持这种格式,还是可能是其他格式?但要回答你的问题:“是否有一个本地方法传递一个字符串,将其分成一个参数数组”答案是否定的,没有单一的函数可以调用来执行你所要求的。 – 2015-04-01 00:08:40
否,需要一个不必要的复杂正则表达式,此时您正在解析php语法。如果infile是其他东西的转储,那么''是否与其他空白不同? – chiliNUT 2015-04-01 00:40:57