2016-08-02 30 views
-1

MEIN CODE:str_replace innerhalb foreach-Schleife ersetzt nicht

$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; 

ich alle usernames nach @ mit ihren zugeordneten Benutzer-ID zu ersetzen versuche, aber wenn ich den Text zu drucken, ist der Ausgang gleich dem Originaltext.

Ausgabe: @admin BLA BLA @mark BLA BLA BLA @koko BLA BLA

+1

ich Ihre Datenbank Benutzernamen mit '@' Präfix enthält zweifeln. Sie müssen das entfernen, um einen Effekt zu erhalten. –

+1

Verwenden Sie auch ['preg_replace_callback'] (http://php.net/preg-replace-callback), um einen Algorithmus (in diesem Fall die Benutzer-ID) für Übereinstimmungen auszuführen. –

+0

Ersetzen Sie nicht alle Inhalte und speichern sie in $ string? Ich meine über das Schreiben – M98

Antwort

0

Ihre SQL-Abfrage so etwas wie SELECT * FROM user WHERE username = '@admin' sein wird - was nicht Ihre Erwartung sein.

dieses Update Versuchen:

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

Hoffnung, dass es Ihnen helfen kann :)

+0

danke Bruder, ich verstehe, wo ist das Problem ;) – user3745594