Seite 1 von 2

PHP - Schleifenproblem(?)

Verfasst: 19.11.2007 23:56
von Frogger
An die PHP-Kenner unter den PB'lern... :)

Ich habe hier eine Linkliste und eine Blackliste.
Nun möchte ich die Linkliste nach URL's durchsuchen, die in der Blackliste vorhanden sind.

Bisher habe ich diesen Code, der aber nicht zu funktionieren scheint.

Ich habe definitiv in der Linkliste Einträge, die auch in der Blackliste vorhanden sind aber sie werden nicht erkannt.

Wo habe ich hier einen Denkfehler??
Kann da eigentlich nichts erkennen... hmm

Code: Alles auswählen

		  $filename_list = "linklist.lst";
		  $blacklist_list = "blacklist.lst";
		  $array_list = array();
		  $array_black = array();
		  
		  $array_list = file($filename_list);
		  $array_black = file($blacklist_list);
		  
		  $list_items = count($array_list)-1;
		  $black_items = count($array_black)-1;
          
		  $deleted = 0;
		  
		  $string = "";
		  $count=$list_items;
        while($count >= 0 )
		  {
			$string = $array_list[$count];
			
			$x=0;
			while($x <= $black_items)
			{
			  $blackstring = $array_black[$x];
			  $pos = strpos($string, $blackstring);
			  if($pos === false)
			  {			    
			  }else{
			    //Eintrag gefunden
			    unset($array_list[$count]);
				 $deleted++;
			  }
			  $x++;
			}			
			$count--;
		  }
        echo "<p>Linkliste wurde bereinigt. ".$deleted." Einträge wurden entfernt!</p>";
MfG

Verfasst: 20.11.2007 00:05
von STARGÅTE
1. wieso if($pos === false) 3mal = ? == reicht doch zum vergleich

2. $pos = strpos($string, $blackstring); kann auch 0 ergeben wenn $blackstring am anfang von $string steht

nutze lieber:
strstr("zeichenkette","suchwort")

Beschreibung:
Prüft, ob in "zeichenkette" das "suchwort" enthalten ist. Wenn es gefunden wurde, wird die Zeichenkette vom ersten Vorkommen des Suchwortes bis zum Ende wiedergegeben. Ansonsten wird false wiedergegeben.

Verfasst: 20.11.2007 00:25
von Frogger
Vielen Dank für die schnelle Antwort.

laut php-resource muss man "===" verwenden
www.php-resource.de/handbuch/function.strpos.htm
// Beachten Sie die Verwendung von ===. Ein einfacher Vergleich (==) liefert
// nicht das erwartete Ergebnis, da die Position von 'a' die nullte Stelle
// (also das erste Zeichen) ist
if ($pos === false) {

Ich versuch es jetzt mal mit strstr
mal schauen ob das hinhaut.

und ansonsten ist nichts auffälliges in meinem code?

EDIT:
mit strstr und "==" genau das gleiche ergebniss :?

Verfasst: 20.11.2007 00:38
von STARGÅTE
vllt funzt unset nicht so wie du denkst ?
unset($variable)

Beschreibung:
Löscht eine Variable und gibt den Speicher frei.
ich weiß nicht wie das bei array geht

Meine Quelle ist : http://www.php4-forum.de/befehlverzeichnis.htm

Verfasst: 20.11.2007 00:53
von Frogger
naja unset an sich funktioniert schon. das hab ich gesondert getestet.

nur die variable $deleted müsste > 0 sein.
also nehme ich an das der fehler irgendwo beim strpos oder if befehl sein müsste.
nur find ich da nix :freak:

ps: der schleifendurchlauf funktioniert auch wie er soll

Verfasst: 20.11.2007 01:02
von STARGÅTE
hier noch n variante:

Code: Alles auswählen

$string = ""; 
        $count=$list_items; 
        while($count >= 0 ) 
        { 
         $string = $array_list[$count]; 
         if (in_array($string,$array_black))
         {             
         }else{ 
           //Eintrag gefunden 
           unset($array_list[$count]); 
           $deleted++; 
         } 
         $count--; 
        } 

aber die beiden Einträge sind ja bestimmt nicht genau gleich oder ?

Verfasst: 20.11.2007 01:13
von Frogger
STARGÅTE hat geschrieben:aber die beiden Einträge sind ja bestimmt nicht genau gleich oder ?
nein und somit funktioniert es mit in_array() leider nicht.

die einträge sehen so aus:

In der Linkliste: hxxp://www.test.de/xyz.irgendwas
In der Blackliste: test.de

bin mittlerweile am verzweifeln :coderselixir:

Verfasst: 20.11.2007 01:24
von STARGÅTE
ah vllt hängt an den Einträgen noch der Zeilenumbruch dran, bei php gibts ja manche funktionen wo der Zeilenumbruch noch mit in der VAR steht, überprüf das mal mit strlen()

Verfasst: 23.12.2007 03:01
von Frogger
danke. daran liegt es tatsächlich :?

und wie kann man den zeilenumbruch entfernen?

Verfasst: 23.12.2007 03:45
von STARGÅTE
abscheiden ? ^^

Code: Alles auswählen

substr($Zeichenkette,0,strlen($Zeichenkette)-2)
vllt auch

Code: Alles auswählen

substr($Zeichenkette,0,strlen($Zeichenkette)-1)
jenachdem welche art von zeilenumbruch du hast ...