PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Assotiatives Array Inhalt nach Datum sortieren?


tsunamitsunami
25.08.2009, 11:50:20
Hallo,

ich habe ein Logikproblemchen:

Und zwar frage ich aus einer Datenbank Umsätze und den Monat ab. Das Ganze möchte ich mit googlechart als Diagramm darstellen.
Um das Diagramm immer vollständig darstellen zu können brauche ich in jedem Fall 12 Werte. Der Rest muss mit 0 aufgefüllt werden, da google mir sonst das Diagramm abschneidet.
Meine Idee ist, das ganze in ein assoziatives Array zu packen, mit dem Monatsnamen als Schlüssel.

Also:

2008 sind Daten Von April bis Dezember erfasst. Also muss ich ein Array haben mit
Jan=>0
Feb=>0
Mar=>0
Apr=>Wert4
May=>Wert5
...

2009 sind Daten Von Januar bis August erfasst. Also muss ich ein Array haben mit
Jan=>Wert1
Feb=>Wert2
Mar=>Wert3
...
Aug=>Wert8
Sep=>0
Oct=>0
...

Wenn ich nun das Array gefüllt habe muss ich nach den Schlüsseln suchen. Nur das Problem ist, wenn ich dann herausfinde das zB 2008 kein Wert für Jan existiert, packt der mir den Nullwert hintendran.
Also:
Nov=>Wert11
Dec=>Wert12
Jan=>0
Feb=>0
...
Wie kann ich das vorher abfangen?

while($ausgabe1 = mysql_fetch_assoc($msquery1))
{
$array1[$ausgabe1['monat']]=round($ausgabe1['fahrdurchschnitt'],1);
}
//$ausgabestring0 = implode(",",$array1);
if(!array_key_exists('Jan',$array1))
$array1['Jan']=0;

if(!array_key_exists('Feb',$array1))
$array1['Feb']=0;

if(!array_key_exists('Mar',$array1))
$array1['Mar']=0;

if(!array_key_exists('Apr',$array1))
$array1['Apr']=0;

if(!array_key_exists('May',$array1))
$array1['May']=0;

if(!array_key_exists('Jun',$array1))
$array1['Jun']=0;

if(!array_key_exists('Jul',$array1))
$array1['Jul']=0;

if(!array_key_exists('Aug',$array1))
$array1['Aug']=0;

if(!array_key_exists('Sep',$array1))
$array1['Sep']=0;

if(!array_key_exists('Oct',$array1))
$array1['Oct']=0;

if(!array_key_exists('Nov',$array1))
$array1['Nov']=0;

if(!array_key_exists('Dec',$array1))
$array1['Dec']=0;
$endstring1 = implode(",",$array1);
}

Meine Idee ist nun das array nach Monatnamen zu sortieren, aber kennt arry_sort einen Monatsnamen, alsonicht als Text?
Gruß
tsunamitsunami

vt1816
25.08.2009, 11:59:47
Verpasse Deinem Array einen Schlüssel nach dem Muster "JJJJMM" - da kannst Du dann besser sortieren...

tsunamitsunami
25.08.2009, 12:31:11
Danke! Das war schnell!!!

Ich habe nun den Schlüssel geändert. Die swl-Abfrage schmeisstmir die korrekten werte raus.
if(!array_key_exists(01,$array1))
$array1['01']=0;

if(!array_key_exists(02,$array1))
$array1['02']=0;

if(!array_key_exists('03',$array1))
$array1['03']=0;

if(!array_key_exists('04',$array1))
$array1['04']=0;

if(!array_key_exists('05',$array1))
$array1['05']=0;

if(!array_key_exists('06',$array1))
$array1['06']=0;

if(!array_key_exists('07',$array1))
$array1['07']=0;

if(!array_key_exists('08',$array1))
$array1['08']=0;

if(!array_key_exists('09',$array1))
$array1['09']=0;

if(!array_key_exists('10',$array1))
$array1['10']=0;

if(!array_key_exists('11',$array1))
$array1['11']=0;

if(!array_key_exists('12',$array1))
$array1['12']=0;

//echo "Arraygröße:".count($array1);

Es existieren Werte von 04-12. Also müsste ich doch 12 Werte erhalten. Komischerweise bekomme ich mit array_size() 18 heraus. Demnach auch einen falschen string:


endstring: 0,0,0,0,20.7,20.3,0,0,18.8,0,19,21.5,0,0,19.6,19.9,20.1,20

Richtig wäre: 0,0,0,20.7,20.3,18.8,19,21.5,19.6,19.9,20.1,20

tsunamitsunami
25.08.2009, 12:37:41
OK Fehler gefunden:

in der sql-Abfrage hatte ich %c statt%d genommen. Daher kannte er "01" natürlich nicht nur "1".

Danke!