preg_match_all() findet nicht alle Wörter

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Werner123

Grünschnabel
Hallo,
preg_match_all() soll alle Wörter anzeigen die zwischen eckigen Klammern stehen [].
Das funktioniert auch ...
PHP:
<?php
$text = 'Weit hinter den [Wortbergen] lebten einst die [Blindtexte], abgeschieden wohnten sie in [Buchstabenhausen] einem paradismatischen Land.';
$suche = '#\[(.*?)\]#';

preg_match_all($suche, $text, $treffer);

for ($i = 0; $i <= count($treffer); $i++) {
echo $treffer[1][$i] . ' ';
}
?>

Wenn jetzt ein Wort doppelt vorkommt wie zum Beispiel [Wortbergen], dann wird [Buchstabenhausen] nicht mehr angezeigt.
Getestet mit PHP7.3
PHP:
<?php
$text = 'Weit hinter den [Wortbergen] lebten einst die [Blindtexte], abgeschieden [Wortbergen] wohnten sie in [Buchstabenhausen] einem paradismatischen Land.';
$suche = '#\[(.*?)\]#';

preg_match_all($suche, $text, $treffer);

for ($i = 0; $i <= count($treffer); $i++) {
echo $treffer[1][$i] . ' ';
}
?>
 
Zuletzt bearbeitet:
Gibt man sich die Treffer mit var_dump aus, wird klar, warum es nicht funktioniert. Die Ausgabe sieht so aus:
Code:
D:\Gemeinsame Dateien\Webentwicklung\test4.php:12:
array (size=2)
  0 =>
    array (size=4)
      0 => string '[Wortbergen]' (length=12)
      1 => string '[Blindtexte]' (length=12)
      2 => string '[Wortbergen]' (length=12)
      3 => string '[Buchstabenhausen]' (length=18)
  1 =>
    array (size=4)
      0 => string 'Wortbergen' (length=10)
      1 => string 'Blindtexte' (length=10)
      2 => string 'Wortbergen' (length=10)
      3 => string 'Buchstabenhausen' (length=16)
Wortbergen Blindtexte Wortbergen
D. h. Du musst deine Schleife so ändern:
Code:
for ($i = 0; $i < count($treffer[1]); $i++) {
 echo $treffer[1][$i] . ' ';
}
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…
Zurück