Ausgabeproblem mit doppelter foreach()
thomas
- php
Hallo alle zusammen, ich habe ein Problem, an dem ich sehr zu knabbern habe. Innerhalb der Ausgabe einer Suchmaschine verwende ich 2 foreach-Schleifen:
$zeile=file($datei);
$match=0;
$woerter=explode(" ", $_GET["key"]);
foreach($woerter as $einzelwort) {
foreach($zeile as $detail){
if(substr_count($detail, $einzelwort)==true) {
$match++;
if($match!==0) {
$split_detail=explode("###",$detail);
echo <<<EOT
//Hier steht die Ausgabe
EOT;
}
}
}
}
Wenn ich jetzt 2 Suchwörter eingebe, z.B. abend schlafen und beide Wörter in 2 Einträgen gefunden wurde, erhalte eigentlich ganz logisch wegen der verschachtelten foreach-Schleifen insgesamt 4 Treffer anstatt 2, wobei dich die Einträge wiederholen. Wie kann ich dieses Ausgabeproblem lösen? Gibt es da eine schlaue Methode? Bin für jeden Tipp dankbar, es muss kein Code sein (man will ja lernen)!
Thomas.
Hi,
Wenn ich jetzt 2 Suchwörter eingebe, z.B. abend schlafen und beide Wörter in 2 Einträgen gefunden wurde, erhalte eigentlich ganz logisch wegen der verschachtelten foreach-Schleifen insgesamt 4 Treffer anstatt 2, wobei dich die Einträge wiederholen. Wie kann ich dieses Ausgabeproblem lösen? Gibt es da eine schlaue Methode? Bin für jeden Tipp dankbar, es muss kein Code sein (man will ja lernen)!
Gefundene Werte nicht ausgeben, sondern in ein neues Array speichern - falls sie dort noch nicht drin stehen...
cu,
Andreas
Sorry wenn ich nicht gleich verstehe, aber was soll ich in ein Array speichern?
Hi,
Sorry wenn ich nicht gleich verstehe, aber was soll ich in ein Array speichern?
Das, was Du ausgeben willst, speicherst Du in Deiner verschachtelten Schleife erstmal in ein neues Array (falls es nicht schon als Eintrag drinsteht).
Nach den verschachtelten Schleifen gibst Du dann das aus, was im neuen Array steht.
cu,
Andreas
Ok danke für den Tipp!
Thomas.
Habs jetzt so gelöst:
$zeile=file($datei);
$match=0;
$woerter=explode(" ", $key);
foreach($woerter as $einzelwort) {
foreach($zeile as $detail){
$search=substr_count($detail, $einzelwort);
if($search==true) {
$match++;
$save=array();
for($i=0; $i<=$match-2; $i++) {
$save[$i]=$zeile[$i];
}
}
}
}
if($match!==0) {
$treffer=count($save);
foreach($save as $load) {
$line_d=explode("[*]", $load);
echo <<<EOT
//Ausgabe
EOT;
}
}
Ich speicher die Zeilen, die wegen der Suchwörter zutreffen, in einem neuen Array und gebe das nach der foreach() aus.
Thomas.
Hallo Thomas,
was willst Du behalten? Ich gehe mal davon aus, dass Du Dateien finden willst, in denen BEIDE Worte drinstehen?
Im Prinzip ist das mit einem Durchlauf machbar. Den zweiten versteckst Du in einer Funktion namens strpos()
int strpos ( string haystack, string needle [, int offset])
Lade Die ganze Datei mit fopen()+fread()+fclose() oder mit der neuen Funktion file_get_contents()in eine Variable. Dann kannst due die nach dem Vorhandensein der beiden Begriffe durchforsten.
Grüße
Chris (C)