2016-06-01 79 views
4

我想編寫一個函數,讓我來代替令牌的重複與從陣列逐次值的字符串,使WHERE name = ? and age ?array('joe', 32)變得Where name = joe and age = 32。 (我知道變量綁定不應該「手工」完成的;我試圖解決傳遞給雄辯DB::select聲明參數)。`str_replace`有什麼特別之處?

我寫了這個:

function str_replace_array($search, array $replace, $subject) { 
    foreach ($replace as $replacement) { 
     $subject = str_replace($search, $replacement,$subject,1); 
    } 
    return $subject; 
} 

但是PHP 5.6.20給了我這個錯誤:

$ php -l str_replace_array.php 
PHP Fatal error: Only variables can be passed by reference in str_replace_array.php on line 5 
Errors parsing str_replace_array.php 

我知道它的功能str_replace(),因爲一個虛擬函數替換它允許它通過語法檢查。雖然沒有與受讓人和參數具有相同的變量 - 但是有沒有什麼可以表明這在這個函數中不起作用?

manual entry不表示任何參數是通過引用傳遞;它表示返回值,所有示例都顯示分配。

什麼交易嗎?

回答

1

str_replace的最後一個參數需要變量來保存計數,而不是進行n次重置;

使用的preg_replace

function str_replace_array($search, $replace, $subject) { 
    foreach ($replace as $replacement) { 
     $subject = preg_replace("/\?/", $replacement,$subject, 1); 
    } 
    return $subject; 
} 
echo (str_replace_array("?",array(1,2,3),"awdwad ? asdaw ? awdwa? awd")); 

結果: 「awdwad 1個asdaw 2 awdwa3 AWD」

+0

與preg_quote機能的研究,你還可以通過$搜索的方式。 –

4

由於您最後一個參數str_replace (mixed $search , mixed $replace , mixed $subject [, int &$count ]),您直接設置爲1,您需要將其設置爲某個變量,如$count,因爲它的值將設置爲執行的替換次數。所以更改爲:

.. 
$subject = str_replace($search, $replacement,$subject, $count); 
.. 
+0

哦嘖 - 有沒有辦法來限制它做更換的次數? – user151841

+1

@ user151841好,你不能做到這一點,只需str_replace函數,你必須編寫一些自定義功能限制str_replace函數 –

+0

它看起來像'的preg_replace()'就是答案http://stackoverflow.com/questions/1252693/using -str替換那麼說,它僅-行爲-ON-THE-首次匹配 – user151841

相關問題