| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

24-11-2010, 13:21
|
|
Nirus2000
Registrierter Benutzer
|
|
Registriert seit: Oct 2010
Beiträge: 28
|
|
PHP Ausgabe und Erweiterung des Arrays
Hallo,
ich komm einfach nicht weiter bzw. auf das Ergebnis:
ich habe folgende MySQL Abfrage:
PHP-Code:
SELECT YEAR(Tabelle1.datum ) AS year, MONTH(Tabelle1.datum ) AS month, count( * ) AS count FROM Tabelle1 WHERE Tabelle2.id = XYZ GROUP BY MONTH , year ORDER BY year, MONTH ASC
hier meine While Schleife:
PHP-Code:
while ($row = $sql->db_Fetch(MYSQL_ASSOC)) { $output_tmp[] = array('count' => (int)$row[count], 'month' => (int)$row[month], 'year' => (int)$row[year] ); }
So... nun bekomme ich als Beispiel folgendes Ergebnis
year | month | count
---------------------
2010 | 04 | 82
2010 | 08 | 92
2011 | 04 | 13
2013 | 06 | 185
okay...
soo, damit ich das ganze weiter verarbeiten kann, sollte die Ausgabe aber so aussehen, das wenn der monat oder gar das Jahr fehlt, trotzdem weiter gezählt wird bzw. das array erweitert wird bis zum letzten Eintrag, ergo 2013. Der Count soll dabei die Variable Null erhalten.
ergo sollte das Ergebnis so aussehen:
Code:
array(X) {
[XY]=> array(3)
{
["count"]=> int(82)
["month"]=> int(4)
["year"]=> int(2010)
}
[XY]=> array(3)
{
["count"]=> int(0) <--- Null bei keinem Eintrag
["month"]=> int(5) <--- fortlaufender Monat
["year"]=> int(2010) <--- fortlaufendes Jahr
}
.....
[XY]=> array(3)
{
["count"]=> int(185)
["month"]=> int(6)
["year"]=> int(2013)
}
.....
etc.
|

24-11-2010, 14:05
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
in diesem Falle musst du selbst eine Schleife bauen, die vom ersten Monat des Ergebnisses bis zum letzten Monat (des letzten Jahres) durchläuft. Innerhalb des Schleifenkörpers suchst du aus den Datensätzen den heraus, dessen Monat und Jahr mit dem Schleifenzähler übereinstimmt. Gibt es keinen der das tut, gibst du als count 0 aus.
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

24-11-2010, 14:31
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hatte grad nichts besseres zu tun...
PHP-Code:
<?php
// unvollständige Liste in $output_tmp, aufsteigend sortiert!
$firstYear = $output_tmp[0]["year"];
$firstMonth = $output_tmp[0]["month"];
$lastYear = $output_tmp[count($output_tmp) - 1]["year"];
$lastMonth = $output_tmp[count($output_tmp) - 1]["month"];
$start = $firstYear * 12 + $firstMonth - 1;
$end = $lastYear * 12 + $lastMonth - 1;
$arrayIndex = 0;
$newArray = array();
for ($i = $start; $i <= $end; $i++) {
$currentYear = $output_tmp[$arrayIndex]["year"];
$currentMonth = $output_tmp[$arrayIndex]["month"];
$currentTime = $currentYear * 12 + $currentMonth - 1;
if ($currentTime == $i) {
$newArray[] = $output_tmp[$arrayIndex];
$arrayIndex++;
}
else {
$currentYear = floor($i / 12);
$currentMonth = 1 + ($i % 12);
$newArray[] = array("year" => $currentYear, "month" => $currentMonth, "count" => 0);
}
}
// vollständige Liste ab hier in $newArray
?>
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

24-11-2010, 14:35
|
|
Nirus2000
Registrierter Benutzer
|
|
Registriert seit: Oct 2010
Beiträge: 28
|
|
ja, das habe ich mir auch schon gedacht, aber da klemmt es ja eben.
hier der Code:
PHP-Code:
for ($i = 0; $i < count($output_tmp); $i++) { if (isset($output_tmp[$i + 1]) && $output_tmp[$i]['year'] + 1 < $output_tmp[$i + 1]['year']) { echo implode(': keine Daten<br />', range($output_tmp[$i]['year'], $output_tmp[$i + 1]['year'])); } }
das Ergebnis ist eher ernuchternd, da ich den Fehler in der Schleife für das Jahr nicht finde.
Ergebnis ist:
2011: keine Daten <--- hier gibt es doch Daten !! Wieso?
2012: keine Daten
2013
2010 fehlt gänzlich, trotz das Daten vorhanden sind.
|

24-11-2010, 14:40
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Siehe meinen letzten Beitrag.
[schlechtlaunigen Kommentar entfernt]
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
Geändert von AmicaNoctis (25-11-2010 um 12:41 Uhr)
|

25-11-2010, 09:38
|
|
Nirus2000
Registrierter Benutzer
|
|
Registriert seit: Oct 2010
Beiträge: 28
|
|
so, wieder da.... danke dafür. hmm... es ist noch nicht ganz perfekt, aber ich werde es noch etwas abrunden. okay? hoffe es klappt....
|

18-12-2010, 12:28
|
|
Nirus2000
Registrierter Benutzer
|
|
Registriert seit: Oct 2010
Beiträge: 28
|
|
Hallo,
leider klappt das nicht so wie ich mir gedacht habe. Das Problem der Weiterverarbeitung des Array's.
Folgende Sache:
Das Array ist nun erstellt wie AmicaNoctis es erstellt hat.
Problem ist, dass das Array doch anders aussehen soll.
So sieht es z.B. bis jetzt aus, wenn es mit Daten gefüttert wird.
PHP-Code:
Array ( [0] => Array ( [count] => 92 [month] => 6 [year] => 2010 )
[1] => Array ( [count] => 30 [month] => 7 [year] => 2010 )
[2] => Array ( [year] => 2010 [month] => 8 [count] => 0
) )
Das Problem ist, das es erst im Monat 6 anfängt, es soll aber immer im Monat 1, also Januar des jeweiligen Jahres anfangen und mit dem 12 Monat enden. Ergo soll jedes Jahr, 12 Monate enthalten, egal ob Daten vorhanden sind oder nicht.
Geändert von Nirus2000 (18-12-2010 um 12:36 Uhr)
|

18-12-2010, 12:39
|
|
Nirus2000
Registrierter Benutzer
|
|
Registriert seit: Oct 2010
Beiträge: 28
|
|
okay, war einfacher als ich gedacht habe... bin selber auf die Lösung gekommen.
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|