Ankündigung

Einklappen
Keine Ankündigung bisher.

Array sortieren mit regex

Einklappen

Neue Werbung 2019

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

  • Array sortieren mit regex

    Hi,

    ich habe einen zweidimensional Array, den ich nach Feld [3] sortieren möchte, mit dem niedrigsten Preis zuerst. Das Problem ist, dass der Array zwangsläufig schon in der formatierten Form (also mit EURO-Währungssymbol €) und Dezimalkomma statt Dezimalpunkt vorliegt.

    Beispiel:
    € 0,80
    € 1,25
    € 0,76

    (also stets EURO-Währungssymbol €, dann ein Leerzeichen, dann die Ziffern mit Dezimalkomma)

    Die Funktion, um den Array $filteredresults zu sortieren, habe ich schon.

    Code:
    function compare($x, $y) {
         if ($x[3] == $y[3]) {return 0;}   
         else if ($x[3] < $y[3])
            return -1;
         else
            return 1;
    }
     
    usort($filteredresults, "compare");
    Funktioniert ja leider nicht vernünftig, wenn ich die Werte in der
    aktuellen Form lasse (€ 0,80). Also hoffe ich dass ihr mir helfen könnt,
    eine Regex und schöne Lösung zu finden, um das Problem zu lösen.

    Regex: Alles ausser Ziffern entfernen und Komma durch Punkt ersetzen.
    Am schönsten wäre es natürlich, wenn die Regex direkt in der compare function
    eingebaut werden könnte, also bspw.

    if (ereg_replace('','',$x[3]) == ereg_replace('','',$y[3])
    ) {return 0;}

    Hier nochmal print_r, damit ihr den Array seht.
    Array ( [0] => Array ( [0] => PRODUKT [1] => 2 x 10 [2] => € 21,80 [3] => € 0,81 [4] => € 5,00 [5] => € 48,60 ) [1] => Array ( [0] => PRODUKT [1] => 2 x 10 [2] => € 23,95 [3] => € 0,83 [4] => € 1,60 [5] => € 49,50 ) [2] => Array ( [0] => PRODUKT [1] => 2 x 10 [2] => € 24,90 [3] => € 0,90 [4] => € 3,90
    (frei ab € 59,00) [5] => € 53,70 ) [3] => Array ( [0] => PRODUKT [1] => 2 x 10 [2] => € 26,00 [3] => € 0,94 [4] => € 4,50
    (frei ab € 69,00) [5] => € 56,49 ))

    Vielen Dank schonmal für jede Hilfe.

    Bis dann,
    Lupi

  • #2
    Ungetestet:
    PHP-Code:
    function compare($x$y) {
         
    $x1 preg_replace(array('/[€ ]/''/,/'), array('''.'), $x[3]);
         
    $y1 preg_replace(array('/[€ ]/''/,/'), array('''.'), $y[3]);
         return 
    $x1 $y1 ? ($x1 == $y1 : -1) : 1;
    }

    Gruss
    L

    Kommentar


    • #3
      Funktioniert bestens, vielen Dank für deine Hilfe lazydog.

      Kommentar


      • #4
        Dafür brauchts doch keine regExpr.
        PHP-Code:
        str_replace (array (' ' '€' '&euro;' ',') , 
                     array (
        '' '' '' '.') , 
                     ...); 
        [COLOR="#F5F5FF"]--[/COLOR]
        [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
        [COLOR="#F5F5FF"]
        --[/COLOR]

        Kommentar

        Lädt...
        X