sscanf: Länge des gescannten Wertes
mauer
- php
0 suit0 Der Martin
Hallo
habe vor, ein Datum aus der Datenbank vom Englischen Format ins Deutsche zu übertragen. Da ich vor kurzem C gelernt habe, ist mir die Funktion scanf bekannt, und habe diese auch in PHP entdeckt (PHP programmiere ich allerdings schon seit Jahren).
Folgenden Code habe ich bisher geschrieben (das angegebene Datum ist nur exemplarisch):
$datetime="2009-08-01 14:50:33";
$s = sscanf($datetime, "%04d-%02d-%02d %02d:%02d:%02d");
print_r($s);
Doch in der Ausgabe wird deutlich, dass die Daten, die z.B. 09 heißen, zu 9 abgeändert werden, obwohl ich die Längenangabe "2" vermerkt habe.
Da habe ich bestimmt einen Denkfehler drin. Ich finde ihn nur nicht. Könnt ihr mir helfen?
Lg
Mauer
Da habe ich bestimmt einen Denkfehler drin. Ich finde ihn nur nicht. Könnt ihr mir helfen?
var_dump() anstatt print_r() wird dir ggf. den entscheidenden Hinweis liefern.
var_dump() anstatt print_r() wird dir ggf. den entscheidenden Hinweis liefern.
Tut es aber leider nicht. Da steht im Prinzip dasselbe drin, was ich schon weiß - 0en werden abgetrennt, egal ob am Anfang oder am Ende des Wertes.
Tut es aber leider nicht. Da steht im Prinzip dasselbe drin, was ich schon weiß
Nein tut es sicher nicht - siehe Martins Antwort :)
var_dump() anstatt print_r() wird dir ggf. den entscheidenden Hinweis liefern.
Tut es aber leider nicht. Da steht im Prinzip dasselbe drin, was ich schon weiß - 0en werden abgetrennt, egal ob am Anfang oder am Ende des Wertes.
Der Unterschied ist doch, dass dir bei var_dump() auch der jeweilige Variablen-Typ mit angezeigt wird. Und wie suit schon bemerkte, sollte dir das in Kombination mit Martins Antwort eigentlich deutlich machen, wo dein (Denk-)Fehler liegt.
Gruß Gunther
Hi,
habe vor, ein Datum aus der Datenbank vom Englischen Format ins Deutsche zu übertragen.
das kommt mir schon spanisch vor. ;-)
Nein, im Ernst: Ein Datumswert sollte in der Datenbank eigentlich sprach- und formatneutral gespeichert sein, und erst bei der Abfrage im gewünschten Format aufbereitet werden - und zwar durch die Datenbank selbst.
»» $datetime="2009-08-01 14:50:33";
> $s = sscanf($datetime, "%04d-%02d-%02d %02d:%02d:%02d");
> print_r($s);
Doch in der Ausgabe wird deutlich, dass die Daten, die z.B. 09 heißen, zu 9 abgeändert werden, obwohl ich die Längenangabe "2" vermerkt habe.
Warum wundert dich das? Du bekommst von sscanf() ein Array aus Zahlenwerten zurück. Wie Zahlenwerte dargestellt werden, entscheidet erst die Ausgabe, in diesem Fall print_r(). Natürlich gibt dir print_r() z.B. den Wert 9 aus und nicht "09", denn die Information, wie diese Zahlenwerte in dem String vorlagen, der von sscanf geparst wurde, ist längst verloren.
Nebenbei wäre die Angabe 09 in einem Zahlen-Kontext auch sowohl in PHP als auch in C syntaktisch falsch. Denn eine führende Null bedeutet Oktal-Schreibweise, und im oktalen System gibt es keine Ziffer 9.
Da habe ich bestimmt einen Denkfehler drin. Ich finde ihn nur nicht.
Jetzt besser?
So long,
Martin