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 (
        '' '' '' '.') , 
                     ...); 
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar

        Lädt...
        X