2016-08-02 93 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