2016-08-02 104 views
-1

我的代碼:str_replace函數foreach循環內不更換

$string = "@admin BLA BLA @mark BLA BLA BLA @koko BLA BLA";  
preg_match_all("/(@\w+)/", $string, $matches); 

foreach ($matches[0] as $usernames) { 
    $user = (" SELECT * FROM user WHERE username = '" . $usernames . "' "); 
    while ($row = mysql_fetch_array($user)) { 
     $string = str_replace($usernames, $row["userid"], $string); 
    } 
} 
echo $string; 

我想與他們相關聯的用戶ID,以取代@畢竟usernames,但是當我打印的文本,輸出是一樣的原文。

輸出: @admin BLA BLA @mark BLA BLA BLA @koko BLA BLA

+1

我懷疑你的數據庫中包含的用戶名與'@'前綴。你需要剝去它才能獲得效果。 –

+1

此外,考慮使用['preg_replace_callback'](http://php.net/preg-replace-callback)在匹配上運行算法(在這種情況下,獲取用戶標識)。 –

+0

是不是要替換所有內容並將它們保存在$ string內?我的意思是在寫作 – M98

回答

0

你的SQL查詢將會像SELECT * FROM user WHERE username = '@admin' - 這可能不是你的期望。

試試這個修復:

$user = (" SELECT * FROM user WHERE username = '" . substr($usernames, 1) . "' ");

希望它可以幫助你:)

+0

謝謝兄弟,我明白在哪裏問題 ;) – user3745594