Reguläre Ausdrücke
mary*
- php
Hej,
ich haben ein Variable i, die per Schleife mit den Werten 0-20 belegt wird.
Weiterhin habe ich einen String der die Ziffern 1-20 mit Komma getrennt enthalten kann.
Z.B. b= 1,2,10,13,11
oder c=6,7,8 je anchdem eben...
Diesen String wiederum wandel ich per explode in ein array.
Ich möchte jetzt vergleichen, ob die Zahlen 1-20 jeweils mit den einzelnen Array-Elementen genau übereinstimmen.
Folgendem reg-Ausdruck fehlt wohl eine Kleinigkeit:
for($i = 0; $i < count($a); $i++) {
if(preg_match('/'.$i.'(?!0)/', $b[$i])) ..tue blar
}
Für
a=1 mit b[2] = 10 ist das Ergebnis wie gewünscht FALSE
Für
ist es TRUE - soll aber FALSE sein.
Ich hoffe, das kam verständlich rüber...
Weiss jemand, wie ich den reg verändern muss?
Vielen Dank,
mary*
Hallo mary*
Ich hoffe, das kam verständlich rüber...
Leider nicht wirklich, ich habe mir einen Reim darauf gemacht, weiß aber nicht ob ich richtig liege:
$b="1,2,10,13,11";
$b=explode(',',$b);
for($i=0;$i<20;$i++)
if(in_array($i,$b) && $i==$a)
# Tue dies und das
Leider ist aus Deiner Beschreibung nicht ersichtlich, inwiefern $a mit $b abzugleichen ist und was es mit $c aufsich hat. Bitte präzisiere Dich dort nocheinmal!
Weiss jemand, wie ich den reg verändern muss?
Sicher; allerdings ist mir noch kein einziger Fall vorgekommen, wo man selbes nicht wesentlich übersichtlicher mit Stringfunktionen oder Datenfeldfunktionen hinbekäme.
Gruß aus Berlin!
eddi
Hallo Eddi,
danke für Dein Bemühen. Sorry, war etwas konfus unterwegs. ;(
Mal vorweg: in_array geht meiner Ansicht nach leider nicht.
Hier nochmal ein Beispiel für string f, der dann zum array e gemacht wird:
$f = 'Leuchtturm,1,Strand,5,Düne,11';
$e= explode(',',$f);
Hier interessieren eigentlich nur die Elemente 1, 3 und 5.
Auf diese Zahlen will ich testen.
Wenn in einem dieser Elemente eine Zahl zwischen 1-20 steht, soll das entsprechend vorher im array e stehende Element ausgegeben werden.
(Aber bei Test auf 1, darf eben nicht auf 11 zutreffen, ausserdem benötige ich genau die Stelle, wo es zutrifft. Hach. Schwörlich auszudrücken...
Folgender Code, sagt jetzt das aus, was ich hoeren moechte. Dank Eddis Anregung auch viel simpler.
for($i=1; $i<20; $i++) {
for($s=1; $e<count($e); $s++)
if($i==$e[$s]) echo $e[$s-1];
}
Allerdings trifft der Code so nicht zu, wenn anstelle von Leuchtturm, Strand etc. eben an genau diesen Stellen Zahlen zwischen 1 und 20 stehen würden.
Das ist in meinem Falle zwar fast auszuschliessen, aber die Unmöglichkeit wäre besser und das geht meines Erachtens nach immer noch nur mit einem reg express...
Gruss vom Lande,
mary*
Hallo zusammen,
Nachschlag:
Ein kleinere Änderung bringt dann doch langfristig und in jedem Fall das gewünschte Ergebnis:
Wenn in der inneren Schleife nur jedes zweite Element in Betracht gezogen wird, ist der Inhalt von "Leichturm" oder "Strand" egal.
for($i=1; $i<20; $i++) {
for($s=1; $e<count($e); $s += 2)
if($i==$e[$s]) echo $e[$s-1];
}
Ich hoffe, irgendjemand findet noch Anregung aus diesem WirrWarr.
'Tschuldigung.
mary*
gudn tach mary*!
ich weiss ja nicht, ob die immer nur zahlen 1 bis 20 angefragt werden sollen und ob immer nur natuerliche zahlen vorkommen koennen. falls dem so ist, kannst du auch einfach folgenden code nehmen:
for($s=1; $s<count($e); $s+=2)
if(1<=$e[$s] && $e[$s]<=20) echo $e[$s-1];
ansonsten sollte auch folgendes funzen:
// $check_set=array(1,2,3,4,5,...,20);
for($s=1; $s<count($e); $s+=2)
if(in_array($e[$s], $check_set)) echo $e[$s-1];
beide male hast du eine explizite schleife weniger.
prost
seth