我有一个字符串,它是从php文件中删除的,这是传递给函数的参数,字符串的var_dump看起来像这样
'foo bar', ['name' => 'John, Smith']
以及我想要做的是将它作为两个参数传递给函数。如果在数组中没有机会,那么我可以爆炸字符串并将两个参数传递给函数。但我不能并且需要正确解析字符串。
我可以通过调用eval来解决这个问题。
eval("myfunction({$string});");
哪个会起作用,但使用eval是“有风险的”。是否有一个本地方法来传递一个字符串,将其分成一个参数数组,然后我可以传递给我的函数?
我无法运行这个其他的php文件,或者更改它的代码,我只是想要查询参数(我已经完成)然后将这些参数传递给我自己的函数。
修改
因此可以更改greped的字符串,我的代码需要处理大多数编写php参数的方法(在','或'或'之后没有空格)。它总是一个字符串和一个数组,这是从文本中提取的。
所以它需要支持像
这样的东西"foo",['name' => 'John, Smith']
"foo",[]
"foo, bar", [1,2 ,3]
类似于反向var_export ... var_import:)
所以,似乎最好的方法是使用eval ...代码是“可信的”但仍然感觉像是一种肮脏的方式,并且认为会有像parse_str或parse_url这样的方法。
编辑2:
所以基本上,两个。 a.txt打开,正则表达式在函数中抓取参数。文件b.php运行正则表达式,然后需要处理字符串以传递给另一个函数。
a.txt无法更改为php文件。需要运行该代码。 (评估如上所述)。
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]);
}
答案 0 :(得分:1)
我尽我所能,但我还在开始使用PHP。没有将“数组字符串”转换为数组的官方函数,因此我尝试使用json_decode()
进行解决方法。
以下是代码和fiddle
<?
function get_string_between($string, $start, $end){
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}
$original = "'foo, bar', ['name' => 'John, Smith' , 'anotherKey' => 'another value']";
$str = get_string_between($original, "'", "'");
$arr = get_string_between($original, "[", "]");
$arr = json_decode(str_replace(' => ',':',str_replace('\'','"','{'.$arr.'}')), true);
var_dump($str);
print_r($arr);
?>
输出
string(8) "foo, bar"
Array
(
[name] => John, Smith
[anotherKey] => another value
)
然后拨打yourFunc($str,$arr)
。
当然我的代码可以改进,这只是一个开始。如果数组值包含=>
,则会出现问题,这应该是固定的。
P.S。:get_string_between()
被采取here。