Ich denke mal, das liegt aber nicht an dem Filter. Du splittest ja mit einem Leerzeichen als Trenner. In dem Link, den du haben willst ist aber ein Leerzeichen drin. Also wird aus '<a href="...">' ein Array mit den Elementen '<a' und 'href="...">'. Wenn du pro Zeile einen Link hast, könntest du mal versuchen mit einem Zeilenumbruch zu splitten, also explode("\n", $string).
Außerdem ist mir noch etwas aufgefallen. Deine erste for-schleife geht nicht über alle Elemente drüber. Das scheint daran zu liegen, dass, sobald ein Element gelöscht wird, das Array logischerweise ein Element kleiner wird. Wenn das Array am Anfang 4 Elemente hat und zwei zwischendrin gelöscht werden, läuft die Schleife scheinbar nur noch bis Index 2. Um das zu Umgehen, kann man das Array rückwärts durchlaufen:
| for($i = sizeof($string) - 1; $i >= 0; $i--)
{
if(preg_match('/^<a href="\/post\/show\//', $string[$i]) == 0)
{
unset($string[$i]);
}
}
|
Beachte $i = sizeof($string) - 1. Der Fehler taucht auch noch in der zweiten Schleife auf. sizeof gibt die Anzahl der Elemente zurück. Der Index fängt aber bei 0 an. Wenn es also 4 Elemente gibt, ist sizeof($string) = 4, es gibt aber nur die Indizes 0, 1, 2, und 3. Es muss also $i < sizeof($string) heißen, nicht ⇐.
Gruß, Jan