Ankündigung

Einklappen
Keine Ankündigung bisher.

Nächst größerer Wert

Einklappen

Neue Werbung 2019

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

  • Nächst größerer Wert

    Hallo,

    ich habe gerade einen Knoten im Kopf, vlt. kann mir jmd weiterhelfen.

    Ich habe ein Array mit Rabatt werten:

    [Rabatt_100] => array
    [Von] => 100,
    [Bis] => 249,
    [Rabatt] => 10

    [Rabatt_250] => array
    [Von] => 250,
    [Bis] => 499,
    [Rabatt] => 15

    [Rabatt_500] => array
    [Von] => 500
    [Bis] => 999999
    [Rabatt] => 20

    Ich möchte nun die nächste Rabatt stuffe ermitteln.

    -> Wenn also eine Menge von 104 existiert, wird Rabatt_100 gezogen weil 104 zwischen 100 und 249 liegt. Die nächste Rabatt Stufe wäre Rabatt_250.
    -> Wenn die Menge 256 ist, dann gilt Rabatt_250, weil 256 zwischen 250 und 500 liegt, die nächste Stufe wäre Rabatt_500

    Wie kann ich das ermitteln?

    LG
    Ralf


  • #2
    Hat es einen Grund das dein Array so kompliziert ist? Das "Bis" ergibt sich ja (zumindest bei deinem Beispiel) überall von selbst.
    Im Moment könntest du dein Array genauso gut so darstellen:
    PHP-Code:
    $rabatte = array(100 => 10250 => 15500 => 20); 
    Was die Handhabung vereinfach würde.

    Kommentar


    • #3
      Ich habe ein Array mit Rabatt werten:

      [Rabatt_100] => array
      [Von] => 100,
      [Bis] => 249,
      [Rabatt] => 10

      [Rabatt_250] => array
      [Von] => 250,
      [Bis] => 499,
      [Rabatt] => 15

      [Rabatt_500] => array
      [Von] => 500
      [Bis] => 999999
      [Rabatt] => 20
      Das hier sind mehrere Arrays, oder stecken die in einem übergeordneten Array. Dann solltes du ev. Index-Keys haben? Fortlaufend? Dann sollte ein +1 schon ausreichen. Und das kann man sicher auch einfacher darstellen, mit "ab-Werten" zB alleine etc..
      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        Der Vorschlag von Tropi hat noch den Vorteil, daß strukturbedingt keine Lücken und Überschneidungen im Rabattarray existieren können.

        Aber auch bei deiner Struktur sehe ich kein Problem. Mach dir doch eine Funktion:
        PHP-Code:
        function getRabate(array $rabate$number){
        ..

        In der Funktion ist zwar nur ein foreach drin, du kannst aber noch fehlerhafte Parameter behandeln.
        PHP-Klassen auf github

        Kommentar


        • #5
          Zitat von Tropi Beitrag anzeigen
          Hat es einen Grund das dein Array so kompliziert ist? Das "Bis" ergibt sich ja (zumindest bei deinem Beispiel) überall von selbst.
          Im Moment könntest du dein Array genauso gut so darstellen:
          PHP-Code:
          $rabatte = array(100 => 10250 => 15500 => 20); 
          Was die Handhabung vereinfach würde.
          Hi,

          ja. Es kann sein das es zwischen zwei stufen keinen weiteren rabatt gibt. Ist vom System so vorgegeben.

          LG
          Ralf

          Kommentar


          • #6
            Zitat von jspit Beitrag anzeigen
            Der Vorschlag von Tropi hat noch den Vorteil, daß strukturbedingt keine Lücken und Überschneidungen im Rabattarray existieren können.

            Aber auch bei deiner Struktur sehe ich kein Problem. Mach dir doch eine Funktion:
            PHP-Code:
            function getRabate(array $rabate$number){
            ..

            In der Funktion ist zwar nur ein foreach drin, du kannst aber noch fehlerhafte Parameter behandeln.
            Hi,

            es ist halt nicht klar ob das nächste Array wirklich das nächst größere ist, ich kann nicht kontrollieren wir das aus der DB kommt, das macht das zugrundeliegende System. Zumal das Array Rabatt_100, Rabatt_250 usw heisst. Also ich kann nur über die von-bis werte gehen.

            LG
            Ralf

            Kommentar


            • #7
              PHP-Code:
              <?php

              $data 
              = array(
                  
              'Rabatt_100' => array(
                      
              'Von' => 100,
                      
              'Bis' => 249,
                      
              'Rabatt' => 10,
                  ),
                  
              'Rabatt_250' => array(
                      
              'Von' => 250,
                      
              'Bis' => 499,
                      
              'Rabatt' => 15,
                  ),
                  
              'Rabatt_500' => array(
                      
              'Von' => 500,
                      
              'Bis' => 999999,
                      
              'Rabatt' => 20,
                  ),
              );

              function 
              fetchNextDiscount(array $discounts$value) {
                  
              $keys array_keys($discounts);

                  
              $filtered array_filter(array_values($discounts), function($discount) use ($value) {
                      return 
              $discount['Von'] <= $value && $discount['Bis'] >= $value;
                  });

                  if ( 
              === count($filtered) ) {
                      throw new 
              OutOfBoundsException('Value does not operate in discounts range');
                  }

                  
              $current key($filtered);

                  return 
              array_key_exists($current 1$keys
                      ? 
              $discounts$keys$current 1] ]
                      : 
              $discounts$keys$current ] ];
              }

              var_dump(
                  
              fetchNextDiscount($data108)
              );
              Code:
              array(3) {
                ["Von"]=>
                int(250)
                ["Bis"]=>
                int(499)
                ["Rabatt"]=>
                int(15)
              }
              [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

              Kommentar


              • #8
                ja. Es kann sein das es zwischen zwei stufen keinen weiteren rabatt gibt. Ist vom System so vorgegeben.
                Ändert nichts an der Grundaussage. Oder Du musst besser beschreiben.
                --

                „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