php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2010

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 24.02.2010, 20:27  
Neuer Benutzer
 
Registriert seit: 20.03.2007
Beiträge: 21
PHP-Kenntnisse:
Fortgeschritten
BlackPanther
Standard [Erledigt] Arrays mit Datum vergleichen und ensprechend Wert einfügen

Hallo Community,

ich habe hier ein Problem mit zwei Arrays und komme einfach nicht mehr weiter.

Kurze Info:
Habe ein Array mit Daten (jeweils ein Datum TT.MM.)
PHP-Code:
Array
(
    [
0] => 16.02.
    [
1] => 17.02.
    [
2] => 18.02.
    [
3] => 19.02.
    [
4] => 20.02.
    [
5] => 21.02.
    [
6] => 22.02.
    [
7] => 23.02.
    [
8] => 24.02.

Das zweite Array hat Werte aus einer Datenbank (Aufrufe von Bannern)
PHP-Code:
Array
(
    [
0] => Array
        (
            [
views] => 1
            
[date] => 2010-02-16
        
)

    [
1] => Array
        (
            [
views] => 1
            
[date] => 2010-02-22
        
)

    [
2] => Array
        (
            [
views] => 9
            
[date] => 2010-02-24
        
)


Nun möchte ich, wenn das Datum gleich ist den Wert "view" ein ein weiteres Array einfügen.
In diesem Beispiel wäre dies so:
PHP-Code:
Array
(
    [
0] => 1
    
[1] => 0
    
[2] => 0
    
[3] => 0
    
[4] => 0
    
[5] => 0
    
[6] => 1
    
[7] => 0
    
[8] => 9

Also immer wenn das Datum gleich ist jeweils den Wert "view" eintragen. Die Indizes müssen gleich sein, da dies für Diagramm benötigt wird. Gibt es keine Übereinstimmung
soll der Wert 0 zugeordnet werden.

Nun habe ich es vergeblich versucht mit folgendem Code die obige gewünschte Ausgabe zu erhalten:
PHP-Code:
for($i 0$i count($this->dates); $i++)
        {
            for(
$x 0$x count($result); $x++)
            {
                if(
$this->dates[$i] == date('d.m.'strtotime($result[$x]['date'])))
                {
                    
$views[$i] = $result[$x]['views'];
                } else
                {
                    
$views[$i] = 0;
                }
            }
        } 
$this->dates ist das 1. genannte Array und $result das 2.

Leider erhalte ich damit folgende Ausgabe:
PHP-Code:
Array
(
    [
0] => 0
    
[1] => 0
    
[2] => 0
    
[3] => 0
    
[4] => 0
    
[5] => 0
    
[6] => 0
    
[7] => 0
    
[8] => 9

Bei mir muss irgendwo ein krasser Denkfehler sein.
Es wird nur der letze Werte des $results eingefügt der Rest wird mit 0 gefüllt.

Wäre klasse, wenn mir jemand helfen kann.
Sollten noch irgendwelche Infos fehlen, einfach kurz nennen.

Vielen Dank!
BlackPanther ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 24.02.2010, 20:40  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

Du musst die innere Schleife beenden, nachdem du eine Übereinstimmung gefunden hast. Andernfalls überschreibst du den Eintrag im Array immer wieder bis zum letzten Datum aus dem Array $dates.
Asipak ist offline  
Alt 24.02.2010, 22:13  
Neuer Benutzer
 
Registriert seit: 20.03.2007
Beiträge: 21
PHP-Kenntnisse:
Fortgeschritten
BlackPanther
Standard

Zitat:
Zitat von Asipak Beitrag anzeigen
Du musst die innere Schleife beenden, nachdem du eine Übereinstimmung gefunden hast. Andernfalls überschreibst du den Eintrag im Array immer wieder bis zum letzten Datum aus dem Array $dates.
vielen, vielen Dank.
Das war es nun habe ich einfach ein break; gesetzt und fertig.

Danke. Nun kann ich die Daten schön als Chart ausgeben.
BlackPanther ist offline  
Alt 04.03.2010, 23:09  
Neuer Benutzer
 
Registriert seit: 20.03.2007
Beiträge: 21
PHP-Kenntnisse:
Fortgeschritten
BlackPanther
Standard Array mit Daten von D-M-Y bis heute

Im Zusammenhang mit meiner obigen Frage habe ich ein neues Problem:

Folgende Funktion/Methode erhält ein Datum als Parameter und soll ein Array mit Daten von dem übergebenen Datum bis heute liefern:

PHP-Code:
    function calc_dates($start)
    {
        
$today date('Y-m-d');

        for(
$i $start$i <= $today$i++)
        {
            
$dates[] = date('d.m.'strtotime($i));
        }

        return 
$dates;
    } 
Dies funktioniert auch. Nur bekomme ich sobald mehr als 3 Tage Differenz existiert einen Memory-Fehler bei der Stelle $dates[] =...

Ich kann den Parameter in allen Arten übergeben. Also wäre auch time denkbar. Momentan ist der Parameter Y-M-D. Das Result der Funktion muss aber:

Code:
Array(
0 => 1.03.
1 => 2.03.
2 => 3.03.
3 => 4.03.
)
sein.

Kann mir jemand sagen, wie ich das optimieren kann, dass es auch mit Differenz > 3 Tage läuft?

Vielen, vielen Dank
BlackPanther ist offline  
Alt 05.03.2010, 01:15  
Neuer Benutzer
 
Registriert seit: 05.03.2010
Beiträge: 7
PHP-Kenntnisse:
Fortgeschritten
freaks befindet sich auf einem aufstrebenden Ast
Standard

Wenn ich Dich richtig verstanden habe mal ein Schuß ins blaue aber ich bin mal am Datum wegen 01.03 statt 1.03 gestolpert

PHP-Code:
Array(
=> 01.03.
=> 02.03.
=> 03.03.
=> 04.03.

freaks ist offline  
Alt 05.03.2010, 01:24  
Neuer Benutzer
 
Registriert seit: 20.03.2007
Beiträge: 21
PHP-Kenntnisse:
Fortgeschritten
BlackPanther
Standard

Zitat:
Zitat von freaks Beitrag anzeigen
Wenn ich Dich richtig verstanden habe mal ein Schuß ins blaue aber ich bin mal am Datum wegen 01.03 statt 1.03 gestolpert

PHP-Code:
Array(
=> 01.03.
=> 02.03.
=> 03.03.
=> 04.03.

Das mit dem Array habe ich kurz runtergeschrieben. Natürlich ist es 01.03.

War nicht ganz verständlich von mir: Ich meinte, dass es auch möglich ist das Datum als time, unix_time etc an die Funktion zu übergeben (momentan kommt es als String). Da bin ich beim Aufruf der Funktion völlig frei.
Da würde dann die Stringverarbeitung wegfallen.


Es muss irgendwie an der Zuweisung: $dates[] = ... liegen, da genau hier der Memory-Fehler auftritt und ich finde es komisch, dass da soviel Speicher belegt wird. Das ist mir echt nicht klar.
BlackPanther ist offline  
Alt 05.03.2010, 12:14  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Zitat:
Zitat von BlackPanther Beitrag anzeigen
Folgende Funktion/Methode erhält ein Datum als Parameter und soll ein Array mit Daten von dem übergebenen Datum bis heute liefern:

PHP-Code:
    function calc_dates($start)
    {
        
$today date('Y-m-d');

        for(
$i $start$i <= $today$i++)
        {
            
$dates[] = date('d.m.'strtotime($i));
        }

        return 
$dates;
    } 
Dies funktioniert auch. Nur bekomme ich sobald mehr als 3 Tage Differenz existiert einen Memory-Fehler bei der Stelle $dates[] =...
Ich bezweifle, daß das funktioniert! Selbst wenn es zu funktionieren "scheint", ist der Code nicht korrekt. Sagst du ja selber, das bei 3 Tage Diff oder mehr der Code Müll produziert.

Lass dir mal $i ausgeben bei einem längeren Durchlauf (> 1 Monat)...

Verwende anstatt der Stringdarstellung eines Datums einen timestamp! Das ist der korrekte Zahlenwert für das, was du vorhast.
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline  
Alt 05.03.2010, 14:30  
Neuer Benutzer
 
Registriert seit: 20.03.2007
Beiträge: 21
PHP-Kenntnisse:
Fortgeschritten
BlackPanther
Standard

Zu erst mal vielen Dank für die Antwort.
Habe mir $i ausgeben lassen, dass ist nahezu endlos. Jedes Datum (TT.MM.) X-Male und erst dann das nächste.

Hole nun das Datum mit UNIX_TIMESTAMP aus der Datenbank und übergebe es an die Funktion.

PHP-Code:
    function calc_dates($start)
    {
        
$today time();

//        echo 'Beginn: '.$start.'<br />';
//        echo 'Heute: '.$today;


        
for($i $start$i <= $today$i+86400)
        {
            echo 
date('d.m.'$i).'<br />';
//            $dates[] = date('d.m.', strtotime($i));
        
}

        return 
$dates
Leider ist es hier nun das gleiche: Endlos viele gleiche Tage und dann der nächste. Das läuft auch nahezu endlos.

Habe versucht nun dem Startdatum immer einen Tag (86400 Sekunden) zu addieren. Leider keine Änderung.

Das Script läuft, als gebe es kein Ende und die Bedingung wäre nie false.
Vielleicht ist das ja auch so und $i ist immer < $today, da sich die Sekunden nicht treffen.
Es muss doch eine Lösung geben. Im Grunde genommen ist das ja echt eine kleine Aufgabe.

Kann mir da jemand helfen?

Geändert von BlackPanther (05.03.2010 um 14:35 Uhr).
BlackPanther ist offline  
Alt 05.03.2010, 15:20  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Zitat:
Zitat von BlackPanther Beitrag anzeigen

PHP-Code:
    function calc_dates($start)
    {
        
$today time();

//        echo 'Beginn: '.$start.'<br />';
//        echo 'Heute: '.$today;


        
for($i $start$i <= $today$i+86400)
        {
            echo 
date('d.m.'$i).'<br />';
//            $dates[] = date('d.m.', strtotime($i));
        
}

        return 
$dates
Kann mir da jemand helfen?
Ja.
Hier steckt dein Fehler:
PHP-Code:
for($i $start$i <= $today$i+86400
$i verändert sich nicht, wenn du einfach nur $i+86400 schreibst - du musst das Ergebnis wieder auf $i zuweisen!
PHP-Code:
for($i $start$i <= $today$i+=86400)
// oder
for($i $start$i <= $today$i=$i+86400
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline  
Alt 05.03.2010, 17:27  
Neuer Benutzer
 
Registriert seit: 20.03.2007
Beiträge: 21
PHP-Kenntnisse:
Fortgeschritten
BlackPanther
Standard

vielen, vielen Dank!

Das war mir wirklich eine große Hilfe. Selbst wäre ich da nicht so schnell draufgekommen, obwohl es ja irgendwie logisch ist, dass der Wert der Variablen auch hochgezählt werden muss, da sich die Bedingung ja sonst nicht ändert. tz
BlackPanther ist offline  
 


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] Datums Foumulareingabe mit Datebankeintrag Datum vergleichen freakymiky PHP Tipps 2008 1 21.06.2008 15:49
[Erledigt] 2 Arrays miteinander vergleichen PHP Tipps 2007 3 17.12.2005 16:54
datum vergleichen Dilandau PHP Tipps 2007 5 07.12.2005 18:23
[Erledigt] Datum vergleichen PHP Tipps 2007 1 02.11.2005 12:50
[Erledigt] Datum vergleichen PHP Tipps 2005-2 1 03.09.2005 16:55
[Erledigt] 2 verschiedene Datum vergleichen - Datenbankabfrage Datenbanken 3 19.06.2005 10:29
Arrays vergleichen PHP Tipps 2005-2 4 16.06.2005 15:41
2 Arrays vergleichen und unterschiede auslesen PHP Tipps 2005 6 25.02.2005 09:34
Datum aus DB mit gegebenem Wert vergleichen Ypsillon Datenbanken 2 20.02.2005 08:45
Datum aus DB mit Aktuellem Datum vergleichen. JEGO PHP Tipps 2005 19 14.01.2005 14:16
[Erledigt] Datum vergleichen PHP Tipps 2004 3 19.10.2004 12:09
[Erledigt] Datum vergleichen! PHP Tipps 2004 1 20.09.2004 14:53
Datum mit Timestamp vergleichen? PHP Tipps 2004 1 28.08.2004 03:06
datum in php-mailscript einfügen PHP Tipps 2004 4 05.08.2004 11:49
[Erledigt] datum vergleichen PHP Tipps 2004 5 01.07.2004 16:40

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php datum vergleichen, datum vergleichen php, datum array, php datum vergleichen differenz, array werte vergleichen, php datum in array vergleichen, php array vergleichen, datum mit datum vergleichen php, php array datum auswerten, datum aray, php datum mit datum vergleichen, array datum, php datum mit heute vergleichen, php datumsvergleich array, datum mit array vergleichen, php array immer 2000 datum, php datumsvergleich aus datenbank, arrays datum vergleichen, http://www.php.de/php-einsteiger/65081-erledigt-arrays-mit-datum-vergleichen-und-ensprechend-wert-einfuegen.html, arrays vergleichen

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:27 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