Andreas: führende Null wird beim rechnen entfernt?

Hallo,
ich will ein Script schreiben welches mir Bilder aus einem Ordner ausliest. Nur haben die Bilder immer eine 4stellige Nummer, beginnend mit 0001.
Nun wird aber beim erhöhen der Nummer die führende Null entfernt. Kann man das verhindern?

So wird erhöht:
$von = 0080;
$bis = 0112;
for($nr=$von;$nr<$bis;$nr++)

ausgegeben wird:
0080
81
82
...

Andreas

  1. hi,

    jau, das problem hatte ich auch schonmal. hab mir damals gar nich die mühe gemacht, nach ner "echten" lösung zu suchen. hab stattdessen am ende halt abgefragt, wie lang denn die zahl nach der rechnung noch ist (strlen). wenn sie z.b. nur noch 2 stellen hat, setzt du 2 nullen wieder davor.

  2. Hallo,
    ich will ein Script schreiben welches mir Bilder aus einem Ordner ausliest. Nur haben die Bilder immer eine 4stellige Nummer, beginnend mit 0001.
    Nun wird aber beim erhöhen der Nummer die führende Null entfernt. Kann man das verhindern?

    Hi,
    das ist der Nachteil von Variants.
    Du könntest die Nullen recht einfach selbst hinzufügen

    function addLeadingZeros($number, $digits){
     for($ii=strlen($number) ; $ii<$digits; $ii++) {$number="0".$number;}
     return $number;
    }

    echo addLeadingZeros(12,4);

    1. Moin!

      Hallo,
      ich will ein Script schreiben welches mir Bilder aus einem Ordner ausliest. Nur haben die Bilder immer eine 4stellige Nummer, beginnend mit 0001.
      Nun wird aber beim erhöhen der Nummer die führende Null entfernt. Kann man das verhindern?

      Hi,
      das ist der Nachteil von Variants.
      Du könntest die Nullen recht einfach selbst hinzufügen

      function addLeadingZeros($number, $digits){
       for($ii=strlen($number) ; $ii<$digits; $ii++) {$number="0".$number;}
       return $number;
      }

      echo addLeadingZeros(12,4);

      Dieses Problem ist so alt, wie die computerisierte Menschheit. Und deshalb hat man es mit einer Standardfunktion schon lange gelöst (die steht übrigens in sehr vielen Programmiersprachen unter diesem Namen zur Verfügung:

      sprintf bzw. printf.

      Für PHP nachzulesen unter: http://de.php.net/manual/en/function.sprintf.php

      Man muß sich also nichts eigenes, möglicherweise auch fehleranfälliges, selbst ausdenken, sondern definiert einfach einen Formatierungsstring, der angibt, wie die als weiteres übergebenen Werte dort eingefügt werden sollen - und fertig.

      Für mit Nullen aufgefüllte Integerzahlen gibt es als Beispiel 5 eine Datumsausgabe.

      Im übrigen empfehle ich zum Formatieren von Zahlen auch gerne number_format(). Aber das fügt keine Nullen vorne vor.

      - Sven Rautenberg

      --
      "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
  3. Nein, das kannst Du nicht verhindern. Immerhin wird zum Rechnen Dein String in Integer gecastet. Aber wenn die Bilder immer 4 Stellen haben dann mach doch nach der Erhöhung wieder folgendes:

    if($nr < 10) { $nr = "000".$nr } //vorher 4, nachher 0004
    elsif($nr < 100) { $nr = "00".$nr } //vorher 56, nachher 0056
    elsif($nr < 1000) { $nr = "0".$nr } //vorher 843, nachher 0842

    Damit sind Deine Variablen wieder Strings und mit Nullen am Anfang aufgefüllt. Wichtig ist das elsif, damit das Prog nicht noch in die nächsten springt, wenn es schon kleiner als 10 ist.

    A.

    1. Moin!

      if($nr < 10) { $nr = "000".$nr } //vorher 4, nachher 0004
      elsif($nr < 100) { $nr = "00".$nr } //vorher 56, nachher 0056
      elsif($nr < 1000) { $nr = "0".$nr } //vorher 843, nachher 0842

      Meinst du nicht auch, dass das hier einfacher ist:

      $nr = sprintf("%04d",$nr);

      :)

      Wobei diese Anwendung im Kontext der Fragestellung schwachsinn wäre. Wenn, dann sollte man $nr als Zahlenvariable belassen und damit rechnen, und nur zur Ausgabe eines Textes mit printf() arbeiten - oder sprintf(). Ständig die Zahl wieder in einen String wandeln, um ihn dann wieder in eine Zahl zu wandeln, ist irgendwie sinnlos aufwendig.

      - Sven Rautenberg

      --
      "Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)
      1. Hallo,
        genau das hatte ich mir eben von: http://de.php.net/manual/en/function.sprintf.php kopiert. :)

        Es funktioniert mit:
        $nr ++;
        $nr = sprintf("%04d", $nr);

        Danke an alle für die schnelle Antworten!

  4. Hi,

    ich will ein Script schreiben welches mir Bilder aus einem Ordner ausliest. Nur haben die Bilder immer eine 4stellige Nummer, beginnend mit 0001.
    Nun wird aber beim erhöhen der Nummer die führende Null entfernt. Kann man das verhindern?

    Dir ist bewußt, daß eine führende Null dazu führt, daß die Zahl nicht dezimal, sondern oktal interpretiert wird?
    0112 = 74

    bei 0080 wird das vermutlich als String interpretiert, da die 8 im Oktalsystem keine gültige Ziffer ist.

    Bei mir wird bei
    $bla = 080;
    echo $bla;
    auch nicht 080, sondern 0 ausgegeben (seltsamerweise wird keine Warning/Notice/... geworfen, obwohl alle eingeschaltet sind)

    und
    echo 0112;
    gibt erwartungsgemäß
    74
    aus.

    Wenn Du Zahlen mit bestimmter Anzahl führender Nullen ausgeben willst, benutze die Funktion printf mit entsprechendem Format-String.

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.Mud-Guard.de/