Announcement

Collapse
No announcement yet.

Elseif in For - Schleife

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Elseif in For - Schleife

    Hallo liebe Entwickler,

    es wäre nett wenn Ihr mir bei meinem Problem helfen könntet.

    Folgender Sachverhalt:
    Es ist bereits ein Array gegeben, welches "mengeeins" heißt. Nun habe ich noch zwei weitere Arrays erstellt (mengezwei und preis).
    Hierbei soll der jeweilige Wert von "mengeeins" und "mengezwei" verglichen werden. Wenn der Wert von "mengezwei" niedriger ist als von "mengeeins" soll der "preis" ausgeben werden und wenn nicht den nächst niedrigeren Mengenwert wählen usw..
    PHP Code:

    mengeeins 
    = array(1,50,100,200,300,500,1000,2000,3000);
    mengezwei = array(1,70,100,800,1200,1600,2000,3000,5000);
    preis = array(0,0.2,0.3,0.4,0.6,0.7,0.8,0.8,1.0);


    /*Nun habe ich mein Problem zwar schon gelöst aber leider nur im "großen Rahmen". Hier zur Verdeutlichung der Vergleich des dritten Mengenwerts.*/


    if($mengezwei[3] <= $mengeeins[3])
    {
        
    $ergebnis[3] = $preis[3];
    }
    elseif(
    $mengezwei[2] <= $mengeeins[3])
    {    
        
    $ergebnis[3] = $preis[2];
    }
    elseif(
    $mengezwei[1] <= $mengeeins[3])
    {    
        
    $ergebnis[3] = $preis[1];
    }
    else
    {
        
    $ergebnis[3] = $preis[0];
    }

    echo 
    $ergebnis[3];


    /* Um mir diesen langwierigen Weg zu sparen, würde ich gerne das Ergebnis mittels zweier For-Schleifen ausgeben lassen. Leider hat dies bisher nicht funktioniert, da ich nicht weiß, wie ich die elseif-Bedingung fehlerfrei in der For-Schleife aufrufen kann. Mein bisheriger Stand:*/

    for($i 0$i <= count($mengezwei); $i++)
    {
        if(
    $mengezwei[$i] <= $mengeeins[$i])
        {
            
    $ergebnis[$i] = $preis[$i];
        }
        else 
        {
            for(
    $j count($mengezwei); $j >= 0$j--)
            {    
                if(
    $mengezwei[$i] <= $mengeeins[$j])
                {    
                    
    $ergebnis[$i] = $preis[$j];
                }
            }
        }
        echo 
    $ergebnis[$i]."<br />";

    Wäre klasse, wenn geholfen werden könnte!

    Freundliche Grüße
    webler

  • #2
    Was ist die Frage?
    Christian

    Comment


    • #3
      Hallo Christian,

      Entschuldigung, dass ich mich unglücklich ausgedrückt habe. Die Frage ist: "Wie müsste der Code mittels For-Schleifen lauten, damit meine Problemstellung gelöst werden?". Bisher habe ich nur eine etwas lange Lösung für meine Problem.

      Gruß
      Webler

      Comment


      • #4
        Die Aufgabe lautet also so:
        Vergleiche jeweils mit den gleichen Indizies Menge1 und Menge2. Ist Menge1 kleiner gleich Menge2 nimm den Preis aus der Preisliste mit diesem Index. Wenn nicht den nächstkleineren Preis.
        Solange du keine Hilfskonstrukte wie sortiere Preisliste o.a. einführst, wird es wohl bei der Lösung bleiben müssen. Sehe jetzt auch nicht, was daran lang oder schlecht sein sollte
        Christian

        Comment


        • #5
          Hallo,

          ich würde mir zuerst eine Funktion schreiben, die zu einem bestimmten Index $pIndex den passenden Preis (nach deinen Regeln) ermittelt. Diese könnte ganz einfach so aussehen:
          PHP Code:
          function getErgebnis($pIndex)
          {
              
          $i $pIndex;
              while (
          $i && $mengezwei[$i] > $mengeeins[$pIndex]) {
                
          $i--;
              }

              return 
          $preis[$i];

          Danach kannst du mit dieser Funktion entweder einfach zu einem gewünschten Index den Preis abfragen oder in einer Schleife alle Preise ermitteln und in dein Ergebnis-Array schreiben.

          PHP Code:
          for ($i 0$i min(count($mengeeins), count($mengezwei)); $i++) {
            
          $ergebnis[$i] = getErgebnis($i);

          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Hallo Falk,

            deine Lösung ist klasse!
            Hättest du eine Idee, wie die Bedingung lauten müsste, wenn folgender Fall eintritt:

            mengeeins:
            1 | 50 | 100 | 200

            mengezwei:
            1 | 50 | 60 | 70

            Jetzt wäre mengezwei[4] < mengeeins[4] aber auch < mengeeins[3], sodass dann das Ergebnis preis[3] und nicht preis[4] eintreten würde (Arrayindex startet mit 1).

            Comment


            • #7
              Hallo,

              Ist das jetzt eine komplette Änderung deiner ursprünglichen Anforderung? Bisher hast du zu einem Element($pIndex) aus Menge_1 ein passendes Element aus Menge_2 gesucht. Jetzt ist es umgedreht, im einfachsten Fall musst du einfach nur Menge_1 gegen Menge_2 austauschen. Ich befürchte aber das es das nicht ist und ich deine grundlegende Anforderung nicht verstehe. Vlt. versuchst du mal allgemein zu beschreiben was du machen möchtest!

              Gruß Falk
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment


              • #8
                Hallo Falk,

                danke für deine Hilfe. Das Ausgangsproblem wurde mit deiner Funktion gelöst.
                Was ich in meinem Ausgangsproblem aber nicht beachtet hatte, ist der Fall, dass wenn der Wert von mengezwei kleiner gleich mengeeins ist auch noch geprüft werden muss, dass mengezwei kleiner gleich den Vorreitern von mengeeins.

                Beispiel:

                mengeeins:
                1 | 50 | 100 | 200

                mengezwei:
                1 | 50 | 60 | 70

                preis:
                0 | 5 | 4 | 3

                Dank deiner Funktion bekomme ich jetzt das Ergebnisarray [0, 5, 4, 3].

                Jetzt würde ich es aber gerne noch haben, dass er bei mengezwei[3] = 70 nicht nur prüft ob es kleiner 200 ist, sondern desweiteren noch prüft ob es kleiner 100, kleiner 50 usw. ist.

                Das Ergebnisarray wäre für das Beispiel dann [0, 5, 4, 4], da 70 kleiner 200 und kleiner 100.
                Sorry für den ganzen Kaudawelsch.

                Gruß
                webler

                Comment


                • #9
                  Hallo,

                  das Prinzip ist doch das Gleiche! Schreibe eine Funktion, die zu einem Wert (oder Index) das passende Ergebnis ermittelt und berechne dann in einer Schleife die Werte.

                  Hier mal das Ganze etwas besser mit Parametern statt globaler Variablen:
                  PHP Code:
                  function getErgebnis($pValue$pValArr$pResArr)
                  {
                       
                  $iMax count($pValArr);
                       
                  $i    0;
                       while (
                  $i <= $iMax && $pValue $pValArr[$i]) {
                         
                  $i++;
                       }

                       if (
                  $i $iMax) {
                         
                  // Es wurde nichts gefunden!
                         
                  return $pResArr[0];
                       }

                       return 
                  $pResArr[$i];
                  }

                  $ergebnis  = array();
                  foreach (
                  $mengezwei as $value) {
                      
                  $ergebnis[] = getErgebnis($value$mengeeins$preis);

                  Gruß Falk
                  Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                  Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                  Comment

                  Working...
                  X