Maresa P.: Probleme beim Konvertieren: STRING => INTEGER

Hallo,

ich habe folgendes Problem:

Beim Konvertierungsversuch eines STRINGS nach INTEGER entsteht immer 0.

Bspl:

ereg("<VonDatum>[0-9]+</VonDatum>", $value, $von);
// => $von = "20050101"

echo gettype($von);
// => string

echo (int) $von[0];
// => 0

settype($von[0], "int");
echo $von[0].'('.gettype($von[0]).')';
// => 0(integer)

Woran kannd as liegen?
Ich möchte mit dem Wert 20050101 "weiterrechnen".

Vielen Dank für Euere Hilfe

Maresa

  1. Hallo Maresa.

    Schon einmal mit intval() probiert?

    Gruß, Ashura

    --
    Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
    30 Days to becoming an Opera8 Lover -- Day 15: Mouse Gestures
    Meine Browser: Opera 8.0 | Firefox 1.0.4 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
    IE Layout-Workaround №1: <!--[if IE]><style type="text/css">*{display:none;}</style><![endif]-->
    1. Hallo Maresa.

      Hi Ashura,

      Schon einmal mit intval() probiert?

      vielen Dank für Deinen Tip. Funktioniert aber leider auch nicht:

      $von[0] = intval($von[0]);
      echo $von[0];

      // => 0

      Viele Grüße
      Maresa

      1. Hallo Maresa.

        vielen Dank für Deinen Tip. Funktioniert aber leider auch nicht:

        $von[0] = intval($von[0]);
        echo $von[0];

        // => 0

        Schon einmal gettype() über $von[0] gejagt?
        Folgende Testsuite funktioniert bei mir einwandfrei und unterscheidet sich kaum von deiner:

        $test = array(0 => "200", 1 => "300");  
        echo $test[0].", Typ: ".gettype($test[0])."<br />";  
        $test[0] = intval($test[0]);  
        echo $test[0].", Typ: ".gettype($test[0])."<br />";
        

        Gruß, Ashura

        --
        Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
        30 Days to becoming an Opera8 Lover -- Day 15: Mouse Gestures
        Meine Browser: Opera 8.0 | Firefox 1.0.4 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
        IE Layout-Workaround №1: <!--[if IE]><style type="text/css">*{display:none;}</style><![endif]-->
        1. Schon einmal gettype() über $von[0] gejagt?

          ja, hab ich auch schon probiert. (siehe mein erstes Posting).

  2. ... hab nocht etwas versucht:

    ereg("<VonDatum>[0-9]+</VonDatum>", $value, $von);
    // => $von = "20050101"

    echo $von[0];
    $von[0]++;
    echo " ".$von[0];
    echo " ".gettype($von[0]);

    // => 20050101 20050101 string

    Liegts vielleicht an dem ereg() ???

    Gruß Maresa

    1. Hallo Maresa.

      ereg("<VonDatum>[0-9]+</VonDatum>", $value, $von);

      Liegts vielleicht an dem ereg() ???

      Vermutlich ja, lies dir einmal den Unterschied zwischen "+" und "*" durch.

      Gruß, Ashura

      --
      Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
      30 Days to becoming an Opera8 Lover -- Day 15: Mouse Gestures
      Meine Browser: Opera 8.0 | Firefox 1.0.4 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
      IE Layout-Workaround №1: <!--[if IE]><style type="text/css">*{display:none;}</style><![endif]-->
      1. Hallo Maresa.

        Hi!

        ereg("<VonDatum>[0-9]+</VonDatum>", $value, $von);

        Liegts vielleicht an dem ereg() ???

        Vermutlich ja, lies dir einmal den Unterschied zwischen "+" und "*" durch.

        hm, habs mal abgeändert... Hat leider auch nichts geholfen:

        ereg("<VonDatum>[0-9]*</VonDatum>", $value, $von);

        echo (int) $von[0];

        // => 0

        Gruß, Ashura

        Gruß
        Maresa

        1. Hallo Maresa.

          hm, habs mal abgeändert... Hat leider auch nichts geholfen:

          Ich merke es eben, ich hatte mich geirrt, der Unterschied ist für dein Problem nicht relevant, tut mir leid.

          Ich kann meine Testsuite drehen und wenden, wie ich will, ich erhalte am Ende immer einen sauberen Integer-Wert.

          Gruß, Ashura

          --
          Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
          30 Days to becoming an Opera8 Lover -- Day 15: Mouse Gestures
          Meine Browser: Opera 8.0 | Firefox 1.0.4 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
          IE Layout-Workaround №1: <!--[if IE]><style type="text/css">*{display:none;}</style><![endif]-->
  3. Hallo Maresa.

    settype($von[0], "int");

    Sofern du das noch immer verwendest, dürfte hier der Fehler liegen.
    Benutze unbedingt intval(), denn settype() liefert lediglich 0 oder 1 (boolean) zurück.

    Gruß, Ashura

    --
    Selfcode: sh:( fo:) ch:? rl:( br:^ n4:& ie:{ mo:) va:) de:> zu:) fl:( ss:| ls:[ js:|
    30 Days to becoming an Opera8 Lover -- Day 15: Mouse Gestures
    Meine Browser: Opera 8.0 | Firefox 1.0.4 | Lynx 2.8.3 | Netscape 4.7 | IE 6.0
    IE Layout-Workaround №1: <!--[if IE]><style type="text/css">*{display:none;}</style><![endif]-->
  4. echo $begrüßung;

    Wenn $von hier

    ereg("<VonDatum>[0-9]+</VonDatum>", $value, $von);
    // => $von = "20050101"

    ein String ist

    echo gettype($von);
    // => string

    und du hier $von als Array verwendest,

    echo (int) $von[0];
    // => 0

    dann ist entweder dein Quelltextzitat falsch oder der Quelltext selber.

    Bitte lass dir mit var_dump($von) den wirklichen Inhalt von $von ausgeben (vorher ein <pre> ist empfehlenswert). Und dann setzt bitte das error_reporting aus E_ALL.

    Ich möchte mit dem Wert 20050101 "weiterrechnen".

    Das erscheint mir nicht sehr sinnvoll. Willst du nicht lieber den String zerlegen und mittels mktime() einen Timestamp erzeugen?

    echo "$verabschiedung $name";

    1. echo $begrüßung;

      Hi!

      Wenn $von hier

      ereg("<VonDatum>[0-9]+</VonDatum>", $value, $von);
      // => $von = "20050101"

      ein String ist

      echo gettype($von);
      // => string

      und du hier $von als Array verwendest,

      echo (int) $von[0];
      // => 0

      dann ist entweder dein Quelltextzitat falsch oder der Quelltext selber.

      Bitte lass dir mit var_dump($von) den wirklichen Inhalt von $von ausgeben (vorher ein <pre> ist empfehlenswert). Und dann setzt bitte das error_reporting aus E_ALL.

      error_reporting(E_ALL);
      var_dump($von);

      // =>
      // array(1) {
      //   [0]=>
      //   string(29) "20050101"
      // }

      Ich möchte mit dem Wert 20050101 "weiterrechnen".

      Das erscheint mir nicht sehr sinnvoll. Willst du nicht lieber den String zerlegen und mittels mktime() einen Timestamp erzeugen?

      doch, ist sinnvoll, da ich überprüfen muss, ob ein Datum im gleich Format größer ist als das aus $von[0].

      echo "$verabschiedung $name";

      Viele Grüße
      Maresa

      1. echo $begrüßung;

        var_dump($von);

        // =>
        // array(1) {
        //   [0]=>
        //   string(29) "20050101"
        // }

        Du schwindelst!    Oder auch nicht, lies weiter... :-)

        string(29) bedeutet ein String mit 29 Zeichen. Dein String hat aber dann 8 Zeichen. Wie das?

        Nun, da scheinen mir Null-Bytes im String zu sein. Schau dir mal den Quelltext der Browserausgabe an. Dort sollten zwischen dem " und der 2 ein paar "Leerzeichen" zu sehen sein.

        Und dann lass dir mal die Bytes von $von[0] als Hex-Werte ausgeben:

        echo chunk_split(bin2hex($von[0]), 2, ' ');

        Wenn meine Vermutung stimmte, dann reicht ein trim() um die Null-Bytes zu entfernen.

        echo "$verabschiedung $name";

        1. echo $begrüßung;

          Hi!

          string(29) bedeutet ein String mit 29 Zeichen. Dein String hat aber dann 8 Zeichen. Wie das?

          Nun, da scheinen mir Null-Bytes im String zu sein. Schau dir mal den Quelltext der Browserausgabe an. Dort sollten zwischen dem " und der 2 ein paar "Leerzeichen" zu sehen sein.

          vielen Dank für den Hinweis... ist mir garnicht aufgefallen.
          Das Problem waren nicht vorhandene Leerzeichen, sondern ein XML-Start-Tag und ein XML-Ende-Tag vor und nach der Zahl.

          Ich entferne diese jetzt mittels str_replace() bevor ich den STRIN nach INT umwandele.

          echo "$verabschiedung $name";

          Vielen Dank für Deine Hilfe

          Maresa