norbertle: If in PHP

Hallo,

im array $sls[id] steht: 005308.

das ist meine if bedingung

if($sls[id] > 50000){ $sls[id] = $sls[id] - 50000; }

leider klappt das nicht :o(

experimente mit inval($sls[id]) führten auch nicht zum Ziel.

Was ist da los?

  1. Hi,

    Hallo,

    im array $sls[id] steht: 005308.

    das ist meine if bedingung

    if($sls[id] > 50000){ $sls[id] = $sls[id] - 50000; }

    leider klappt das nicht :o(

    und was heißt das?

    005308 würde m.W. wegen der führenden 0 oktal interpretiert - aber bei oktal dürfte keine 8 drin sein. Da kommt dann evtl. 0 bei raus, was kleiner als 50000 wäre ...

    Sollte das dezimal gemeint sein: 5308 ist kleiner als 50000.

    cu,
    Andreas a/k/a MudGuard

    1. Sorry, der Wert ist natürlich 53088!

      1. Hi,

        Sorry, der Wert ist natürlich 53088!

        mit oder ohne führende Nullen? Was das für einen Unterschied macht, schrieb ich ja schon.

        cu,
        Andreas a/k/a MudGuard

        1. Und, wie krieg ich die führenden Nullen weg?

          1. Hi,

            Und, wie krieg ich die führenden Nullen weg?

            mit der Del-Taste?

            Live long and pros healthy,
             Martin

            --
            Früher war ich klein und dumm. Inzwischen hat sich so manches geändert. Ich bin größer geworden.
          2. Hallo norbertle,

            die Frage ist: wieso sind sie überhaupt da? Wenn da 0053088 steht, dann enthält das Array mutmaßlich keine Zahl, sondern eine Zeichenkette.

            PHP verfügt über einen Typenjongleur (kein Scherz, steht so im Handbuch: Type Juggling), der Datentypen so aneinander anpasst, dass der Programmcode möglichst Sinn ergibt.

            if ("0053088" > 50000) kann man auf zwei Arten deuten: „Vergleiche die Zahl 0053088 mit der Zahl 50000“, oder „Vergleiche die Zeichenkette 0053088 mit der Zeichenkette 50000“. Bei einem Zahlenvergleich ist das Ergebnis TRUE, bei einem Zeichenkettenvergleich wäre es FALSE (weil Zeichenketten Zeichen für Zeichen von links nach rechts verglichen werden).

            Der Type Juggler entscheidet sich zu Gunsten der Zahl, d.h. deine Bedingung ist TRUE und es wird subtrahiert.

            Das Ergebnis der Subtraktion ist 3088, und zwar die ZAHL 3088, nicht die Zeichenkette.

            Und jetzt wäre an der Zeit, dass Du uns sagst, was denn bei Dir passiert, womit du unzufrieden bist, und was Du denn gerne als Ergebnis hättest. Und zwar ganz konkret.

            Rolf

            --
            sumpsi - posui - obstruxi
        2. Hallo MudGuard,

          führende Nullen machen nicht immer einen Unterschied.

          echo 001234;
          echo "001234" + 1;
          echo intval("001234");
          echo intval("001234", 8);
          

          Ausgaben sind 688, 1235, 1234 und 688. intval in PHP hat genau wie parseInt in JavaScript einen base-Parameter, der per Default 10 ist. Der Unfug mit der oktalen Deutung passiert nur bei numerischen Literalen. Der Type Juggler verwendet intval mit Default-base.

          Aber das ist in jeder Sprache anders und immer wieder eine Freude

          🤮

          Rolf

          --
          sumpsi - posui - obstruxi
    2. Hallo,

      
      > > if($sls[id] > 50000){
      > > 	 $sls[id] = $sls[id] - 50000;
      > > }
      
      

      005308 würde m.W. wegen der führenden 0 oktal interpretiert - aber bei oktal dürfte keine 8 drin sein. Da kommt dann evtl. 0 bei raus, was kleiner als 50000 wäre ...

      abgesehen davon ist der Index falsch: Entweder ist es ein String, dann 'id', oder es ist eine Indexvariable, dann $id.

      Live long and pros healthy,
       Martin

      --
      Früher war ich klein und dumm. Inzwischen hat sich so manches geändert. Ich bin größer geworden.
  2. Tach!

    im array $sls[id] steht: 005308.

    Das kann nicht sein, das wäre ein ungültiges Oktal-Literal. Was steht wirklich drin? Eine Kontrollausgabe mit var_dump() erzählt es genauer.

    das ist meine if bedingung

    if($sls[id] > 50000){ $sls[id] = $sls[id] - 50000; }

    leider klappt das nicht :o(

    "Klappt nicht" klappt nicht als Fehlerbeschreibung. Kannst du genauer sagen, was du erwartest und was stattdessen passiert?

    experimente mit inval($sls[id]) führten auch nicht zum Ziel.

    Wenn du sachdienliche Hinweise haben möchtest, warum etwas nicht wie gedacht funktioniert, solltest du auch hier genauer beschreiben, was das Ziel sein soll und was du probierst.

    dedlfix.

    1. Hallo,

      "Klappt nicht" klappt nicht als Fehlerbeschreibung.

      außer vielleicht beim Klodeckel.

      Wenn du sachdienliche Hinweise haben möchtest, warum etwas nicht wie gedacht funktioniert, solltest du auch hier genauer beschreiben, was das Ziel sein soll und was du probierst.

      ... und wie deine tatsächliche Datenlage genau aussieht.

      Live long and pros healthy,
       Martin

      --
      Früher war ich klein und dumm. Inzwischen hat sich so manches geändert. Ich bin größer geworden.