string zerlegen

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

  • string zerlegen

    hi
    ich muss strings wie zb: 2 cl Pernod, 1 Kugel Vanilleeis, 6 cl Orangensaft, 3 cl Dubonnet Rouge, Grenadine, 1 cl Carpano Punt e Mes, usw zerlegen..

    und zwar in die einzelnen bestandteile: Anzahl, Einheit und Name..
    das problem dabei ist aber, dass es manchmal keine einheit gibt, dass es manchmal keine anzahl gibt, oder dass der name nicht nur aus einem wort, sonder aus mehreren wörtern bestehen kann..
    ich habe das mit folgendem script versucht:

    PHP-Code:
    <?
    if (ereg("[0-9]", $zutaten[$zutaten_count]))
    {
        $zutat = explode(" ", $zutaten[$zutaten_count]);
        $einheit = trim($zutat[2]);
        $zutat_name = "";
        for ($zutat_count=3;$zutat_count<count($zutat);$zutat_count++)
        {
            $zutat_name = "".$zutat_name." ".trim($zutat[$zutat_count])."";
        }
    }

    else
    {
        $einheit = "";
        $zutat_name = trim($zutaten[$zutaten_count]);
    }

    $exists_r = mysql_query("SELECT ZutatName FROM Zutaten WHERE ZutatName = '".$zutat_name."'");
            
    if (mysql_num_rows($exists_r) < 1)
    {
        $update = mysql_query("INSERT Zutaten (ZutatName, Einheit, ID) VALUES ('".$zutat_name."', '".$einheit."', '')") OR mysql_error();
    }
    ?>
    bei dieser methode klappt das zerlegen zu 70%.. aber eben nur zu 70%.. und ich bräuchte 100%
    ich hab aber keine ahnung, warum das manchmal funktioniert und manchmal nicht..
    hat jemand einen bessere vorschlag?

    mfg
    whizzler

  • #2
    Erstmal vorneweg: Ich habe mir dein Script nicht angeschaut - sondern nur dein Problem durchgelesen. Ich finde, dass die Daten in einem sehr schlechten Format abgelegt wurden. Besser wäre XML, INI-Format, CSV oder ähnliches gewesenb. Aber das sei jetzt mal zweitrangig.

    Ich würde so vorgehen.
    • Einzelne Zutaten herausfiltern explode( ',' ...)
    • Erhaltene Zutaten in alle Einzelteile zerlegen explode(' ', ...) auch wenn dadurch erst einmal die Zutatenliste zerlegt wird
    • Erstes Element der Zutat validieren is_int(), wenn false dann ist keine größe angegeben
    • zweites Element mit einem Array von Einheiten überprüfen.
    • Element 1 und 2 - wie benötigt aus dem Array entfernen und durch Implode die Beschreibung wieder zusammen fassen


    Alternativ könnte das ganze auch mit regulären Ausdrücken gemacht werden.

    Kommentar

    Lädt...
    X