2011-02-24 168 views
0

我們使用str_replace到replace {$name}來自datebase的$ user ['name'],但它只能替換db的第1個條目,假設有20個用戶,並且第1個條目是'tester',那麼它將全部替換{$ name}的有1項只,檢查我們的代碼如下...str_replace在foreach循環內

foreach($users as $user) { 
$content = str_replace('{$name}', $user['name'], $content); 
$msg = '<div class="message">'.$content.'</div>'; 
} 
+0

你的$ content變量中有20個相同的行嗎?而窮人用戶必須編輯全部20個才能設置自定義問候語? –

+0

您有{$ name}作爲您的搜索值。這與PHP中的內聯變量插入語法相同。是否可以將{$ name}翻譯成錯誤的內容,從而產生問題?嘗試改變你的宏像[名字]一樣簡單。或者你可以嘗試分隔'\ {\ $ name \}'另外,我們不知道你在做什麼。你可能只是覆蓋$味精,儘管那麼我想它只會爲最後一項工作。 – Ali

回答

-1

如果你只是想更換一次發生,使用$ count參數的函數調用

foreach($users as $user) { 
    $count = 1; 
    $new_content = str_replace('{$name}', $user['name'], $content,$count); 
    $msg = '<div class="message">'.$new_content.'</div>'; 
} 

Manual entry for str_replace

+0

@mabwi謝謝你的回覆,請你說明問題出在哪裏?謝謝。 – seoppc

+0

你應該堅持$ content而不是$ new_content,並且你也應該從循環中移除$ msg ;-)順便說一句,作者怎麼知道$ content中必須有多少變量{$ name}?並不是真正實現這個目標的正確方法...... – Capsule

+0

問題是,默認情況下,str_replace是「貪婪的」:它將用第一個$名稱替換所有的{$ name}。當您再次循環時,您再也沒有{$ name},因爲它們在循環的上一步中全部被替換了。 – Capsule