Wie Daten nach bestimmten Werten filtern? (Kombiniert)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Wie Daten nach bestimmten Werten filtern? (Kombiniert)

    Hallo Forum,

    ich bräuchte mal euren Rat oder einen Denkansatz wie man folgendes realisieren könnte.

    Ich habe INI-Dateien, die bei jedem Seitenaufruf in ein einfaches Array eingelesen und sortiert werden.
    Diese Daten sollen nach bestimmten (kombinierbaren!) kriterien gefiltert und dann angezeigt werden.

    Also zum beispiel so:

    Rufe ich index.php ohne Parameter auf, zeigt er alle Dateien an.
    Rufe ich sie z.b. so auf: index.php?alphabet=a, zeigt er mir alle mit Alphabet A an.

    Bei index.php?alphabet=a&plz=5, zeigt er mir alle mit Alphabet A !UND! PLZ-bereich 5 an.

    Die Daten nach denen gefiltert werden soll (Also Name, PLZ, Ort, usw) liegen in den INI-Dateien.
    Diese mittels entspr. Funktionen auszulesen und zu filtern ist ja ansich nicht das Problem.

    Aber was, wenn ich nach mehreren Sachen kombiniert filtern will wie oben im Beispiel?

    Ich habe es so versucht, das geht zwar im Prinzip, führt aber nur zu Chaos:

    PHP-Code:
    if ($alphabet != "" and $plz == "")  {
        
    // prüfe, ob alphabet übereinstimmt und packe dann ins array

    } elseif ($alphabet != "" and $plz != "")  {
        
    // prüfe, ob alphabet UND PLZ übereinstimmt und packe dann ins array

    } elseif ($alphabet == "" and $plz != "")  {
        
    // prüfe, ob PLZ übereinstimmt und packe dann ins array

    }

    ...

    // hier inhalte des Arrays ausgeben 
    Ob jetzt schon beim erstellen des Arrays oder erst beim Auslesen gefiltert wird ist eigentlich egal, die Problematik bleibt die gleiche, da man sich immer in bösen IF-Konstrukten verheddert :-) (ich will ca 10 Werte filtern das wären dann 10x10 if-bedingungen )


    Als zweiten versuch habe ich pro Filterkriterium ein Array erstellt...
    PHP-Code:
    if ($alphabet != "") {
        
    // packe ins array $array_alphabet 
    }

    if (
    $plz != "") {
        
    // packe ins array $array_plz 
    }

    $array_anzeigen $array_alphabet $array_plz;

    // hier die inhalte von $array_anzeigen ausgeben 
    Das funktioniert nicht richtig (Doppeleinträge..) und ist zudem (wie auch das erste) extrem dirty :-)
    Gibt es da bessere Lösungen? Mit Datenbankabfrage wäre das wahrscheinlichviel einfacher aber die Daten kommen aus einer Fremdanwendung das kann ich nicht ändern mit dem Format.


    Ich hoffe man kann verstehen was ich möchte !! :-)
    Vielen Dank schonmal für jegliche Anregung

    DANKE lappen
    Zuletzt geändert von putzlappen; 19.02.2007, 21:48.
    mfg, lappen

  • #2
    Reicht es nicht, das zu durchsuchende array zu durchlaufen und mit strpos() und/ oder Konsorten die gewünschten Einträge in ein separates array abzulegen?
    Im Prinzip bswp. so:
    PHP-Code:
    $to_be_searched = array('a123''b123''c123''d123''e123');

    $letter $_GET['letter']; // ?letter=a
    if (!empty($letter))
    {
        
    $matches = array();
        foreach (
    $to_be_searched as $value)
        {
            if (
    $value{0} == $letter)
            {
                
    $matches[] = $value;
            }
        }

    Spontaner Einfall. Ich bin mir sicher, dass es da elegantere Lösungen gibt.
    Nieder mit der Camel Case-Konvention

    Kommentar


    • #3
      Hi,

      bau dir einen kleinen filter. Wobei jede bedingung ein prädikat
      wird. Dann baust du im filter einen logischen baum auf dessen
      knoten die booleschen verknüpfungen darstellen und die blätter
      die prädikate. Für jedes element im array durchläufst du den baum
      mit jedem wert und wenn du das ende erreichst ohne abgebrochen
      zu haben, dann hast du einen gültigen wert den du ins ergebnis
      array tun kannst.

      greets
      (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

      Kommentar

      Lädt...
      X