2014-10-29 85 views
-1

我運行簡單的PHP代碼PHP str_replace函數錯誤

$myVariable = 1; 
$myVariable2 = str_replace(array(1, 2, 3), array('do 25 lat', 'od 26 do 35 lat', 'pow. 35 r.z.'), $myVariable); 
echo $myVariable2; 

而且結果是:

做OD 26做戰俘。 35 r.z.5 lat lat

我檢查了不同的PHP版本。有任何想法嗎?

+0

什麼輸出你期待? – 2014-10-29 09:59:12

+0

[str \ _replace with array]的可能重複(http://stackoverflow.com/questions/13715826/str-replace-with-array) – 2014-10-29 10:01:59

回答

3

你犧牲品的文檔中指定的疑難雜症 - 看看在「注意事項」的str_replace documentation

更換爲了疑難雜症

由於str_replace()函數替換左到右,它在進行多次替換時可能會替換先前插入的值。另請參閱本文檔中的示例。

本質上發生了什麼是順序更換,爲你傳遞一個數組作爲第二個參數:

  1. 被替換做25 LAT
  2. 在這個字符串,被替換爲od 26 do 35 lat,給你do 26 do 35 lat5 lat
  3. 在該字符串中,被替換爲pow。 35 r.z.給你你看到的最終結果。
0

這是因爲str_replace陣列對被一個接一個地應用。

嘗試strtr

$myVariable = 1; 
$replacePairs = array(
    1 => "do 25 lat", 
    2 => "od 26 do 35 lat", 
    3 => "pow. 35 r.z." 
); 
$myVariable2 = strtr($myVariable,$replacePairs); 
echo $myVariable2; 
0

這是不是一個錯誤,這是str_replace正常行爲。這個函數會遍歷你的search數組並且每次發現一個事件時,它會用相關的replace替換它。

這樣:

(search and match 1) 1 -> "do 25 lat" 
(search and match 2) "do 25 lat" -> "do od 26 do 35 lat5 lat" 
(search and match 3) "do od 26 do 35 lat5 lat" -> "do od 26 do pow. 35 r.z.5 lat5 lat"