Probleme beim Konvertieren: STRING => INTEGER
Maresa P.
- php
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
Hallo Maresa.
Schon einmal mit intval() probiert?
Gruß, Ashura
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
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
Schon einmal gettype() über $von[0] gejagt?
ja, hab ich auch schon probiert. (siehe mein erstes Posting).
... 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
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
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
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
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
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";
echo $begrüßung;
Hi!
Wenn $von hier
ereg("<VonDatum>[0-9]+</VonDatum>", $value, $von);
// => $von = "20050101"ein String ist
echo gettype($von);
// => stringund du hier $von als Array verwendest,
echo (int) $von[0];
// => 0dann 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
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";
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