php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 17.12.2011, 16:54  
Neuer Benutzer
 
Registriert seit: 17.12.2011
Beiträge: 2
PHP-Kenntnisse:
Anfänger
S3phi2 befindet sich auf einem aufstrebenden Ast
Standard Preg_match externe txt schleife

Hallo Liebe Community,

ich bin neu hier, hab aber über die Suche nichts "genaues" gefunden was zu meinem Thema passt. Ich hab glaub ich aber auch einfach nur nen Brett vorm Kopf :

Und zwar will ich einen String auf Bestimmte Wörter aus einer Txt prüfen. Allerdings funktioniert lediglich immer der letze Wert, hängt also vermutlich irgendwie mit der schleife zusammen.

Die txt (ForbiddenWords.txt) sieht wie folgt aus:

Idiot
Test
Sonne
Trottel

Hier mein Code :

Code:
<?

$Name = "Trottel";
$array = file("ForbiddenWords.txt");
$ArrayLength=count($array);

for($i=0;$i<$ArrayLength; $i++)
{
      if( preg_match("/$array[$i]/", $Name)) 
	   {
            $Name = "Verboten ";
	     echo $Name;
            }
	     else
		echo "Passt "; 
}
?>
Er ändert daraufhin das böse Wort in "Verboten" um.
So funktioniert es, wenn ich jedoch die Variable $Name in zB "Test" ändere klappt es nicht mehr. Nur mit dem letzten Eintrag in der txt.
Das Array wird auch richtig befüllt, habs via echo "$array[$i]" getestet....

aber wieso klappt nur das letzte ?

Hab schon einige Foren durchsucht aber irgendwie sind es andere probleme. mit Foreach funktioniert es übrigens genauso, also auch nur der letzte Wert :/

Also wenn einer was sieht woran es liegt wär ich sehr dankbar ^^

Es handelt sich übrigens um eine "Blacklist" für eine Highscore-Liste welche Strings nicht eingegeben werden dürfen ...

Geändert von S3phi2 (17.12.2011 um 17:00 Uhr).
S3phi2 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 17.12.2011, 17:24  
Erfahrener Benutzer
 
Benutzerbild von jspit
 
Registriert seit: 19.08.2011
Beiträge: 701
PHP-Kenntnisse:
Anfänger
jspit wird schon bald berühmt werden
Standard

Schau dir mal genau an was in deinem array steht welches dir file liefert. Und nach dem aha-Erlebnis schau dir nochmal genau die Docu von file an.

Geändert von jspit (17.12.2011 um 17:32 Uhr).
jspit ist offline   Mit Zitat antworten
Alt 17.12.2011, 18:55  
Neuer Benutzer
 
Registriert seit: 17.12.2011
Beiträge: 2
PHP-Kenntnisse:
Anfänger
S3phi2 befindet sich auf einem aufstrebenden Ast
Standard

also in meinem Array steht :

echo $array[0];
echo $array[1];
echo $array[2];
echo $array[3];

ergibt

Idiot
Test
Sonne
Trottel

also eigentlich genau das was ich drin haben wollte oder nicht ? Das "aha-Erlebnis" bleibt mir noch aus ....

in der Docu von file steht :

"Gibt die Datei in einem Array zurück. Jedes Element des Arrays entspricht einer Zeile in der Datei, ohne dass das Zeilenende entfernt wird"

was es ja auch tun soll. Ich weiß also nicht worauf du hinaus willst oO

PS. habe auch versucht an das preg_match das besagte Zeilenende anzuhängen, aber ohne Erfolg (wenn es denn daran liegt).

Dennoch schonmal danke für Hilfe

PSS: SOOOO danke für den Hinweis, es lag an den NEW_LINES ... da ich noch anfänger bin, hats was länger gedauert ... aber nun klappts ! danke !

Geändert von S3phi2 (17.12.2011 um 19:05 Uhr).
S3phi2 ist offline   Mit Zitat antworten
Alt 17.12.2011, 19:06  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

file() liefert standardmässig das Newline Zeichen mit. FILE_IGNORE_NEW_LINES als 2. Parameter verwenden...

Auf sowas kommt man übrigens von selbst, wenn man sich mal das $array ausgeben lässt...
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 17.12.2011, 19:46  
Erfahrener Benutzer
 
Benutzerbild von jspit
 
Registriert seit: 19.08.2011
Beiträge: 701
PHP-Kenntnisse:
Anfänger
jspit wird schon bald berühmt werden
Standard

Zitat:
Zitat von lstegelitz Beitrag anzeigen
Auf sowas kommt man übrigens von selbst, wenn man sich mal das $array ausgeben lässt...
..aber nicht mit echo, wie oben. var_dump ist schon besser, zeigt zum string zusätzlich die länge an.
jspit ist offline   Mit Zitat antworten
Alt 17.12.2011, 19:47  
Erfahrener Benutzer
 
Benutzerbild von Dark Guardian
 
Registriert seit: 10.10.2009
Beiträge: 2.630
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekanntDark Guardian ist jedem bekannt
Standard

Tipp noch dazu:

Verwende für Debug Ausgaben die Funktion var_dump() anstelle von echo.

Der Unterschied liegt darin das var_dump() dir den Datentyp und die Länge mit ausgibt. Durch das Zeilenumbruchzeichen wäre die Ausgabelänge von var_dump($array[0]) ungleich der von var_dump('Idiot') gewesen was dich schon von selbst auf die richtige Spur geführt hätte.
__________________
"Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".
Dark Guardian ist offline   Mit Zitat antworten
Alt 17.12.2011, 20:16  
Neuer Benutzer
 
Registriert seit: 05.11.2011
Beiträge: 22
PHP-Kenntnisse:
Fortgeschritten
Soundz befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
foreach ($bad_words as $word) {

 if (
stristr($derZuTestendeText$word) !== false) {

 echo 
'Böses Wort: '.$word.' gefunden!';
 }

Bei Schleifen in denen du ein Array verwurstet bitte immer foreach benutzen, außer es geht nicht anders.

Was der Code macht:

Foreach läuft für jeden key einmal durch, also sparst du dir schonmal das counten der keys, stripos sucht das erste vorkommen in einem String nach einem anderen String ab

PHP-Code:
stripos(Der Heuhaufen, Die Nadel); 
Die abfrage
PHP-Code:
!== false 
ist etwas knackiger.

Ein kleiner Exkurs zu === dazu:

PHP-Code:
$test1 "1";
$test2 1
Wenn ich jetzt frage

PHP-Code:

if ($test1 == $test2) {

Wird er mir da reinlaufen, weil beides 1 ist.

Wenn ich aber mit === abfrage wird überprüft ob es auch WIRKLICH ein Integer(Ganze Zahl) ist. Bei === würde er hier also nicht reinlaufen, weil INT(1) ist nicht STRING(1)


Ich hoffe ich konnte dir weiterhelfen
Soundz ist offline   Mit Zitat antworten
Alt 18.12.2011, 15:47  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.486
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Du kannst auch auf die Schleife verzichten und PHP das regeln lassen (preg_replace):
PHP-Code:
$originalText 'Nur ein Idiot wird diesen Test in praller Sonne machen. Vielleicht auch ein Trottel, man weiss es nicht!';
$badWords array_mapcreate_function('$var''return "/\b" . $var . "\b/i";'), file'ForbiddenWords.txt'FILE_IGNORE_NEW_LINES ) );
$cleanedText preg_replace$badWords'***'$originalText );

echo 
$cleanedText
...ich gehe mal davon aus, daß Du die Texte entschärfen willst, daher der Replace-Ansatz.
__________________
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Albert Einstein
Arne Drews ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
For-To Schleife in MySQL Aldaris Datenbanken 8 07.11.2011 16:14
Schwierigkeiten mit For Each Schleife phpnewbie666 PHP Einsteiger 22 14.02.2011 20:27
[Erledigt] Wieso While Schleife endlos? JackSparrow PHP Einsteiger 8 02.02.2011 22:33
[Erledigt] Schleife 2 auf Schleife 1 beziehen bei XML Abfrage ePole PHP Einsteiger 16 17.12.2010 09:58
fwrite() funktioniert nicht innerhalb einer Schleife hausmaus PHP Tipps 2010 4 26.04.2010 13:45
[Erledigt] foreach Schleife lord_icon PHP Tipps 2010 11 06.02.2010 01:15
Zufällig erstellte Werte einzeln aus einer Schleife holen atthex PHP Tipps 2009 3 04.01.2010 19:03
[Erledigt] Zahl (alias) in Schleife als definiertes Wort umwandeln fulltilt PHP Tipps 2009 8 15.03.2009 16:47
Schleife nach Tastendruck beenden schnurzli PHP Tipps 2006 7 24.03.2006 18:56
Warum wird die erste Schleife nur einmal durchlaufen ? PHP Tipps 2006 12 03.03.2006 20:04
[Erledigt] While schleife in while schleife = nur ein datensatz?! PHP Tipps 2005-2 9 28.10.2005 12:48
for Schleife -> unterbrechen, Befehl einfügen, fortsetzen PHP Tipps 2005-2 7 10.10.2005 21:05
while schleife in einer while schleife beim tmpl-sys PHP Tipps 2005-2 0 27.07.2005 15:07
while schleife beenden PHP Tipps 2005 3 29.03.2005 20:35
IF ELSEIF ELSEIF ELSE mit While Schleife PHP Tipps 2005 9 04.03.2005 23:27

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
24 stunden endlosschleife php

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:30 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum