Einfache if Abfrage

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

  • Einfache if Abfrage

    Hi Leute ...

    Entweder steh ich grad übelst auf dem Schlauch,
    oder irgendwas läuft wirklich schief

    2 Werte vergleichen

    Ich lese zwei werte aus einer xml datei (Position 1, Position 2)
    Beide sind zahlen 0-50.

    Er gibt mir aber immer "gleich" aus, als würden ihn > oder < nicht interessieren.

    PHP-Code:
    $alt $item->lastweek;
    $neu $item->thisweek;

    if (
    $neu $alt)
            { echo 
    "runter"; }

        elseif (
    $neu $alt)
            { echo 
    "hoch"; }
            
        elseif (
    $alt == $neu)
            { echo 
    "gleich";  }

        elseif (
    $alt == 0)
            { echo 
    "neu"; } 
    Sry, mir ist das schon fast peinlich ...
    Aber kann mir da einer sagen was ich falsch gemacht hab ?
    Sämtliche Lektüre sagt mir immer genau dies, aber es geht nicht ...

    Gruß Johannes

  • #2
    Was ergibt die Debug-Ausgabe mit var_dump()?

    Kommentar


    • #3
      Also wenn ich direkt von $item ausgehe sagt er mir dies hier
      (von dem ersten jetzt ... habe davon 50 items

      Code:
      gleichobject(SimpleXMLElement)#4 (6) { ["thisweek"]=> string(1) "1" ["lastweek"]=> string(1) "3" ["weeknumber"]=> string(1) "4" ["artist"]=> object(SimpleXMLElement)#7 (0) { } ["title"]=> object(SimpleXMLElement)#8 (0) { } ["image"]=> object(SimpleXMLElement)#9 (0) { } }
      wenn du diesen meintest

      lastweek und thisweek spuckt sonst direkt eben zahlen von 0-50 aus.
      wobei 0 bei neuen öfter vorkommt.

      Kommentar


      • #4
        PHP-Code:
        var_dump($neualt);

        if (
        $neu $alt) {
            echo 
        "runter";
        } elseif (
        $neu $alt) {
            echo 
        "hoch";
        } elseif (
        $alt == $neu) {
            echo 
        "gleich";
        } elseif (
        $alt == 0) {
            echo 
        "neu";

        Was kommt hier als Ausgabe und was würdest du stattdessen erwarten?

        Kommentar


        • #5
          Also wenn ich die Werte einfach ausgeben lasse, bekomme ich ja
          wie erwartet beim ersten die aktuelle position mit 1 ausgegeben
          und die alte position (lastweek) 3
          dennoch sollte das dann ja eigendlich funktionieren, denn 1 und 3 sind ja nicht gleich ...

          PHP-Code:
          object(SimpleXMLElement)#6 (1) {
            
          [0]=>
            
          string(1"1"
          }
          object(SimpleXMLElement)#5 (1) {
            
          [0]=>
            
          string(1"3" 

          Kommentar


          • #6
            Habe in dem selben Script nun noch eine in der Spalte davor,
            welche die aktuelle Position anzeigt und diese noch einfärben soll,
            wenn diese sich im bereich 1-5 und 6-10 bewegen, die restlichen aber normal anzeigt.

            diese funktioniert komischer weise einwandfrei.
            obwohl ich dort eigentlich nix anderes mache ..

            PHP-Code:
            <?php 
                
            if ($item->thisweek <= 5)
                    { 
                    echo 
            "<span style=\"color: #9b207a;\">".$item->thisweek.".</span>";
                    }
                    elseif (
            $item->thisweek && $item->thisweek <= 10)
                    {
                    echo 
            "<span style=\"color: #ff0000;\">".$item->thisweek.".</span>";
                    }
                    else 
                    {
                    echo 
            "".$item->thisweek.".";
                    } 
            ?>

            Kommentar


            • #7
              Hi ezzywave,

              kleiner Haken:

              Wenn du vorher schon abfragst, ob $neu größer als $alt ist,
              so wird dieser Code . . .
              PHP-Code:
              . . .
              elseif (
              $alt == 0
                      { echo 
              "neu"; } 
              nie ausgeführt. Auch nicht, wenn $neu auch 0 wäre. Denn dann sind sie ja gleich.

              Du müsstest also diesen Zustand als erstes abfragen. Den letzten Vergleich kannst du dir auch sparen.
              Wenn von 4 Zuständen 3 nicht zutreffen, so kannst du ohne Vergleich die Ausgabe vornehmen.

              PHP-Code:
              $alt rand(05); 
              $neu rand(05);
              echo 
              'Alt: '.$alt.'<br>';
              echo 
              'Neu: '.$neu.'<br>';
              if (
              $alt == 0
              { echo 
              "Neu"; } 
              elseif (
              $neu $alt
              { echo 
              "Hoch"; } 
              elseif (
              $neu $alt
              { echo 
              "Runter"; } 
              else { echo 
              "Gleich"; } 
              Gruß
              Günni

              Kommentar


              • #8
                Funktioniert

                Danke für den Tipp Günni.

                Ich habs jetzt nochmal auf basis der funktionierenden abfrage geschrieben.

                PHP-Code:
                <?php
                    $alt 
                "".$item->lastweek."";
                    
                $neu "".$item->thisweek."";
                    if (
                $neu $alt)
                    {
                    echo 
                "<h5><span style=\"color: #00a400;\"><i class=\"icon-circle-arrow-up\"></i></h5>";
                    }
                    elseif (
                $neu === $alt)
                    {
                    echo 
                "<h5><span style=\"color: #ecc300;\"><i class=\"icon-circle-arrow-left\"></i></h5>";
                    }
                    elseif (
                $alt == 0)
                    {
                    echo 
                "<strong><span style=\"color: #00a400;\">NEU</strong>";
                    }
                    else
                    {
                    echo 
                "<h5><span style=\"color: #cf1600;\"><i class=\"icon-circle-arrow-down\"></i></h5>";
                    }
                    
                ?>
                Nun Funktioniert alles wie es soll ... Danke für die Hilfe

                Kommentar


                • #9
                  Hi ezzywave,

                  nur interessehalber . . .

                  du vergleichst $neu == $alt vor $alt == 0.

                  $neu kann also niemals 0 sein?

                  Gruß
                  Günni

                  Kommentar


                  • #10
                    Zitat von Guenni61 Beitrag anzeigen
                    Hi ezzywave,

                    nur interessehalber . . .

                    du vergleichst $neu == $alt vor $alt == 0.

                    $neu kann also niemals 0 sein?

                    Gruß
                    Günni
                    Hi Günni.

                    Doch, ich bekomme ich aus der XML für "Neueinstiege" eine 0 bei $alt vorgegeben.
                    Hierbei vergleiche ich die Platzierungen in den Charts.
                    Gestiegen, Gefallen, Gleich, Neu
                    Aktuelle Woche und die der Vorwoche - Als Tendenz mit einer Grafik dargestellt zur Verdeutlichung.

                    Grüße,
                    Johannes

                    Kommentar


                    • #11
                      Hi ezzywave,

                      ich glaub' du verstehst nicht, worauf ich hinaus will,oder ich kann dir nicht folgen.

                      Meine Frage: $neu kann also niemals 0 sein? hast du mit ja beantwortet.

                      Jetzt guck' dir in deinem gepostetem Code die Reihenfolge deiner Bedingungen an.

                      Wenn $alt == 0 ist, und $neu ebenfalls 0 sein kann, so wird dieser Teil . . .
                      PHP-Code:
                      elseif ($alt == 0

                      echo 
                      "<strong><span style=\"color: #00a400;\">NEU</strong>"

                      . . . nicht mehr berücksichtigt, weil du ja vorher auf Gleichheit prüfst, womit die Bedingung erfüllt wäre, wenn beide 0 sind.
                      PHP-Code:
                      $neu 0;
                      $alt 0;
                      if (
                      $neu $alt
                          { 
                          echo 
                      "Hoch"
                          } 
                          elseif (
                      $neu === $alt
                          { 
                          echo 
                      "Gleich"
                          }
                          
                      /*
                          * *** DIESER ZWEIG WIRD NICHT AUSGEFÜHRT, WENN BEIDE NULL SIND ***
                          */
                          
                      elseif ($alt == 0
                          { 
                          echo 
                      "Neu"
                          } 
                          else 
                          { 
                          echo 
                      "Runter"
                          } 
                      Er soll aber ausgeführt werden, wenn $alt == 0 ist. Deshalb musst du diese Prüfung vor der Prüfung auf Gleichheit vornehmen.

                      Gruß
                      Günni

                      Kommentar

                      Lädt...
                      X