PHP - Schleifenproblem(?)

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
Frogger
Beiträge: 425
Registriert: 14.03.2006 19:27
Kontaktdaten:

PHP - Schleifenproblem(?)

Beitrag 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
[PB4.20]
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Frogger
Beiträge: 425
Registriert: 14.03.2006 19:27
Kontaktdaten:

Beitrag 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 :?
[PB4.20]
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Frogger
Beiträge: 425
Registriert: 14.03.2006 19:27
Kontaktdaten:

Beitrag 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
[PB4.20]
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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 ?
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Frogger
Beiträge: 425
Registriert: 14.03.2006 19:27
Kontaktdaten:

Beitrag 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:
[PB4.20]
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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()
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Frogger
Beiträge: 425
Registriert: 14.03.2006 19:27
Kontaktdaten:

Beitrag von Frogger »

danke. daran liegt es tatsächlich :?

und wie kann man den zeilenumbruch entfernen?
[PB4.20]
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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 ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten