ZitatOriginal geschrieben von Teddie_Neubert
> Der Lösungsansatz ist prima, und nun kommt die Gemeinheit:
> Die Selektionskriterien sind leider nicht statisch, d. h. der
> aufrufende User gibt diese in einer von ihm gewählten
> Reihenfolge und in beliebiger Länge beim Aufruf mit.
schön, dann gibt's halt zwei verschachtelte Schleifen.
> Wir haben dann wohl ... ein Array mit Selektionskriterien,
Ich fuerchte, wir haben erstmal nur einen String, der zwischen den Kriterien, sowie vorne und hinten ueberfluessige Leerzeichen enthalten kann. Außerdem teilweise Kleinbuchstaben, obwohl eigentlich grosse gesucht sind.
Schau mal, ob das passt:
<?php
# Die Beispieldaten als langer String:
$daten="14:18 aktuelle_Uhrzeit\r\n";
$daten.="14:19 S6 Gross Karben 104 P\r\n";
$daten.="14:19 S1 Offenbach(Main)Ost 102 P\r\n";
$daten.="14:19 DNR81272 Koenigstein(Taunus) 22 P\r\n";
$daten.="14:19 IC2391 Salzburg Hbf 101 P\r\n";
$daten.="14:22 S2 Niedernhausen(Ts) 103 P\r\n";
$daten.="14:22 S7 Goddelau-Erfelden 2 P\r\n";
# Die Suche (auch mit unsinnigen Leerzeichen rechnen):
$sucheingabe=' S IC ';
# die unsinnigen Leerzeichen entfernen (vorne und hinten)
# bzw durch ein einzelnes ersetzen (Mitte):
$sucheingabe=ltrim(rtrim(preg_replace('/ +/',' ',$sucheingabe,-1)));
# Den Suchstring in ein Feld wandeln:
$suche=explode(' ',$sucheingabe);
# Die Daten in ein Feld wandeln:
$daten=explode("\r\n",rtrim($daten));
# die eigentliche Suchfunktion:
$ergebnis='';
foreach($daten as $d)
{
$a=split(' ',$d,3);
$a=$a[1];
if (preg_match('/aktuelle_/i',$a)) { $ergebnis.=$d."\r\n"; }
else
{
$gefunden=0;
foreach($suche as $s)
{
if (preg_match("/^$s/i",$a)) { $gefunden=1; }
}
if ($gefunden) { $ergebnis.=$d."\r\n"; }
}
}
echo $ergebnis;
?>
Deine DOS-Lösung sieht so kurz und elegant aus, wie zuverlaessig funktioniert die denn? Sucht die wirklich an der richtigen Stelle, oder findet man bei der Suche nach "re" ausser den Regionalexpressen auch alle Zuege nach Regensburg?
Gruß, Wolfgang