我已經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