preg_match() -> Lösungsidee?

Arndtinho

Erfahrenes Mitglied
Hallo,

ich zerlege einen String und prüfe dann mit preg_match() ob in diesem String eine gewisse Zeichenfolge vorkommt. Soweit so gut, weil funktioniert auch.
Das "Problem" an der Sache ist, dass ich den String mit 24 verschiedenen Zeichenfolgen vergleichen muss. Im Moment sieht es folgendermaßen aus:

PHP:
if (preg_match("/".$check_art."/", "101") or
    preg_match("/".$check_art."/", "102") or
    preg_match("/".$check_art."/", "103") or
    ...
   preg_match("/".$check_art."/", "142") )

   echo "mache was";
else
   echo "mache was anderes";

Dies nimmt natürlich viele Zeilen in anspruch.
Kann man sowas auch eleganter lösen? Wenn ja, wie?

Gruß,
Arndtinho
 
Wenn die Reihenfolge so haargenau aufeinander passt, in Reihenfolge

1,2,3,4,........,10

dann kannst du das ja mit for() lösen. Wenn nicht dann evtl noch mit dem Ansatz einer if() abfrage. Aber so würde ich das lösen, glaub ich.

->[phpf]for[/phpf]
->[phpf]foreach[/phpf]

Gruß Mirko
 
Wozu gibt's denn Schleifen:
PHP:
$matched = FALSE;
for ($x = 101; $x <= 142; $x++) {
  if (preg_match("/".$check_art."/", strval($x))) {
    $matched = TRUE;
    break;
  }
}

if ($matched) {
   echo "mache was";
} else {
   echo "mache was anderes";
}

snuu
 
ok. Danke für den Hinweis. Hatte vergessen zu erwähnen, dass es nicht strikt nach dem Muster von 1 bis 10 geht.
Bsp.:
112, 113, 115, 124, 126, 129, 131 usw.

Gruß,
Arndtinho
 
Ja das hatte ich ja gesagt, und Snuu hat es mit einem Beispiel erklärt.

Es ist in Snuu's Beispiel ja eine if() Abfrage zu sehen.

If() gibt den Wert true oder false zurück. Also wenn das Script an Stelle X nix findet dann bleibt der Wert von matched halt False.

Gruß Mirko
 
Ich habe mir gedacht, dass es da eine elegantere Lösung für geben müsste.
Und in der Tat, ich glaube ich habe sie gefunden..
Die schönere Lösung des Problems heißt preg_grep()

Das ganze dürfte dann in etwa so aussehen:
PHP:
$array = ("101","102","103", ... "142");
if (preg_grep("/".$check_art."/",$array) { do this; }
else { do that; }

Vorrausgesetzt preg_grep() gibt FALSE zurück, wenn nichts gefunden wurde.
Dazu stand nichts auf php.net.
Aber ich denke, dass dies der Fall ist und selbst wenn nicht, so sollte sich trotzdem damit ein schönerer Lösungsweg finden lassen.
Es muss dann ja nur die if-Abfrage angepasst werden, denke ich.
 
Zurück