php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.08.2011, 00:55  
Neuer Benutzer
 
Registriert seit: 15.04.2009
Beiträge: 7
Saeufer befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Rechnung in foreach-Schleife

Da ich hier total am verzweifeln bin und sicherlich den einfachen Fehler nicht sehe, frag ich einfach mal hier und hoffe das mir jmd helfen kann

Also ich bin dabei aus einer XML Datei Attribute von den Einträgen auszulesen und diese dann halt ausgebe. Die XML ist ca so aufgebaut:

Code:
<smses>
  <sms protocol="0" address="123456" date="1297848518029" type="2" subject="null" body="Guten morgen! :)" toa="0" sc_toa="0" service_center="null" read="1" status="-1" locked="0" />
  <sms protocol="0" address="123456" date="1297856318000" type="1" subject="null" body="Morgen." toa="145" sc_toa="0" service_center="123456" read="1" status="-1" locked="0" />
  <sms protocol="0" address="123456" date="1297858332801" type="2" subject="null" body="Ganz gut." toa="0" sc_toa="0" service_center="null" read="1" status="-1" locked="0" />
</smses>
Ich brauche daraus jeweils nur den Type, Date, Address und Body. Das auslesen und ausgeben der einzelnen Dinge klappt ja auch ohne Probleme.
Nur muss ich die Zeit, die als timestamp angegeben ist vorher durch 1000 Teilen. Klingt nicht schwer, doch kommt, sobald ich die Rechnung einfüge, jedes mal der selbe Wert raus der auch noch falsch ist, sodass ich überall das selbe falsche Datum bekomme.
Der Code sieht derzeit so aus:

PHP-Code:
<?php
$xml 
simplexml_load_file('sms-20110217233515.xml');
$anz 0;

foreach (
$xml->sms as $sms) {
    
//Counter
    
$anz++;
    
//Timeconverter
    
$date $sms['date'];
    echo 
strftime("%A %x - %H:%M"$date/1000);
    
//SMS Ausgabe
    
$cont $sms['body'];
    switch (
$sms['type']) {
        case 
1:
            include(
'template.r.html');
            echo 
"<br \>";
            break;
        case 
2:
            include(
'template.s.html');
            echo 
"<br \>";
    }
}
echo 
'insgesamt: '.$anz;
?>
Füge ich einfach nur ein "echo $sms['date'];" ein, bekomme ich alle dazugehörigen und richtigen timestamps, aber nützt mir nichts, da es keiner lesen kann. Sobald ich aber "/1000" einfüge kommt nur Müll raus. Ich verstehe nicht was ich hier Falsch mache.

Danke schon mal vorweg!


mfg
Saeufer ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 03.08.2011, 01:29  
Erfahrener Benutzer
 
Registriert seit: 03.08.2010
Beiträge: 300
PHP-Kenntnisse:
Fortgeschritten
Asterixus sorgt für eine eindrucksvolle AtmosphäreAsterixus sorgt für eine eindrucksvolle Atmosphäre
Asterixus eine Nachricht über Skype™ schicken
Standard

PHP streikt bei Zahlen, die über die 32-bit-Grenze überschreiten (-2.147.483.648 bis 2.147.483.647).

Was du brauchst, ist GMP oder bcmath oder du benutzt substr:
PHP-Code:
$sms['date'] = (int)substr($sms['date'], 0, -4); 
PHP-Code:
$sms['date'] = (int)gmp_strval(gmp_div_q($sms['date'], '1000')); 
PHP-Code:
$sms['date'] = (int)bcdiv($sms['date'], '1000'0); 

Geändert von Asterixus (03.08.2011 um 01:34 Uhr).
Asterixus ist offline   Mit Zitat antworten
Alt 03.08.2011, 02:36  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

PHP-Code:
var_dump(1297848518029/1000);
echo 
date('r'1297848518029/1000);

// Ausgabe:
// float(1297848518.029)
// Wed, 16 Feb 2011 10:28:38 +0100 
Ich kann da nicht wirklich ein Problem feststellen.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 03.08.2011, 12:09  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Was soll das für einen tieferen Sinn haben? Ein Timestamp durch 1000 geteilt ergibt doch irgendeinen beliebigen Wert in der Vergangenheit?! Das soll doch wohl nicht das Ziel sein?
Im Übrigen kannst Du eine Ganzzahldivision von Zehnerpotenzen auch einfach durch Abschneiden entsprechender Stellen von rechts erreichen.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 03.08.2011, 12:11  
Neuer Benutzer
 
Registriert seit: 15.04.2009
Beiträge: 7
Saeufer befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Asterixus Beitrag anzeigen
PHP streikt bei Zahlen, die über die 32-bit-Grenze überschreiten (-2.147.483.648 bis 2.147.483.647).

Was du brauchst, ist GMP oder bcmath oder du benutzt substr:
PHP-Code:
$sms['date'] = (int)substr($sms['date'], 0, -4); 
PHP-Code:
$sms['date'] = (int)gmp_strval(gmp_div_q($sms['date'], '1000')); 
PHP-Code:
$sms['date'] = (int)bcdiv($sms['date'], '1000'0); 
Daran hats gelegen, Danke! Hab ich gar nicht dran gedacht, aber stimmt!
Danke

Zitat:
Zitat von ChrisB Beitrag anzeigen
PHP-Code:
var_dump(1297848518029/1000);
echo 
date('r'1297848518029/1000);

// Ausgabe:
// float(1297848518.029)
// Wed, 16 Feb 2011 10:28:38 +0100 
Ich kann da nicht wirklich ein Problem feststellen.
Wenn man die Werte einzeln rechnet, scheint das auch zu funktionieren, nur in einer Schleife irgendwie nicht! Deswegen hab ich mich auch so gewundert warum mein Konzept dann auf einmal nicht ging

Zitat:
Zitat von nikosch Beitrag anzeigen
Was soll das für einen tieferen Sinn haben? Ein Timestamp durch 1000 geteilt ergibt doch irgendeinen beliebigen Wert in der Vergangenheit?! Das soll doch wohl nicht das Ziel sein?
Im Übrigen kannst Du eine Ganzzahldivision von Zehnerpotenzen auch einfach durch Abschneiden entsprechender Stellen von rechts erreichen.
Der gegebene timestamp ist in Millisekunden, ich brauche ihn aber in Sekunden. Deswegen durch 1000


mfg
Saeufer ist offline   Mit Zitat antworten
Alt 03.08.2011, 12:17  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

PHP-Code:
substr ($foo , -3); 
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] verschachtelte foreach schleife Zulakis PHP Einsteiger 2 23.03.2011 22:13
[Erledigt] Wie komme ich an ein Array aus einer foreach Schleife ePole PHP Einsteiger 7 01.01.2011 11:50
[Erledigt] Eintrag in Datenbank aus foreach Schleife ePole PHP Einsteiger 12 31.12.2010 14:49
[Erledigt] In foreach Schleife zum nächsten Element springen eisenhans PHP Tipps 2010 5 02.09.2010 13:45
Foreach Schleife mir PHP Mailer sdcleitung PHP Tipps 2010 6 04.06.2010 11:46
[Erledigt] Mit XPath im DOMDocument PHP5 und der foreach Schleife einen Element WERT hjw-kunstwerk PHP Tipps 2010 3 03.06.2010 00:07
[Erledigt] foreach Schleife lord_icon PHP Tipps 2010 11 06.02.2010 01:15
[Erledigt] Variable wird in foreach Schleife nicht übergeben Registrierer PHP Tipps 2009 12 08.07.2009 20:40
[Erledigt] foreach schleife beim erstellen einer image_map schlägt fehl litterauspirna PHP Tipps 2009 8 25.05.2009 13:04
[Erledigt] foreach schleife Darstellungsfehler Chriss PHP Tipps 2008 22 31.10.2008 19:39
[Erledigt] foreach schleife Tombax PHP Tipps 2008 3 21.10.2008 21:31
[Erledigt] Einträge mit einer Foreach Schleife rausholen saitho PHP Tipps 2008 17 18.07.2008 22:46
foreach in for schleife matthros PHP Tipps 2006 11 25.07.2006 22:47
werte aus einer foreach schleife in sql db einrtagen PHP Tipps 2005 3 31.05.2005 21:56
foreach schleife abbrechen PHP Tipps 2004 3 27.09.2004 18:06

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
timestamp schleife php, foreach beenden php, datum xml sms, renung in foreach php, sms date xml, rechnung in schleife php, php foreach rechnung, php division schleife, php schleife dividieren, <sms protocol=\0\, xml foreach where php

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:02 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum