Array richtig füllen

bootscreen

Grünschnabel
Moin

ich habe ein Problem bzw eine Denkblockade und hoffe das ihr mir helfen könnt.

Also folgendes Problem, ich zieh mir aus meiner Datenbank "Stundenwerte" für die einzelnen Wochentage einer bestimmten Kalenderwoche und gebe diese als Diagramm aus. Jetz gibt es aber nicht für jeden Wochentag diese Stundenwerte und somit fehlen einige Tage in dem Diagramm. Kann mir jemand sagen wie ich es hinbekomme das alle Wochentage im Diagramm angezeigt werden, egal ob es Stundenwerte gibt oder nicht?

Hier mal mein PHP-Code und ein Bild des Diagramms wie es derzeit aussieht.
PHP:
<?php
	//Allgemeine Diagrammdaten
	
	$Diagrammbreite = 500;
	$Diagrammhoehe = 400;
	
	$Diagrammtitel = "Besucherauswertung";
	
	//Ränder & Abstände
	
	$AbstandAussen = 3;
	
	$RandOben = 30;
	$RandLinks = 30;
	$RandUnten = 80;
	$RandRechts = 20;
	
	//Diagrammfarben
	
	$HintergrundfarbeR = 255;
	$HintergrundfarbeG = 255;
	$HintergrundfarbeB = 255;
	
	$HintergrundfarbeAuswertungsbereichR = 224;
	$HintergrundfarbeAuswertungsbereichG = 224;
	$HintergrundfarbeAuswertungsbereichB = 224;
	
	$TextfarbeR = 64;
	$TextfarbeG = 64;
	$TextfarbeB = 64;
	
	$AchsenfarbeR = 0;
	$AchsenfarbeG = 0;
	$AchsenfarbeB = 0;
	
	$BalkenfarbeR = 00;
	$BalkenfarbeG = 185;
	$BalkenfarbeB = 00;
	
	// DB-Zugriff
	
	$DatabaseHost = "xxx";
	$DatabaseUser = "xxx";
	$DatabasePassword = "xxx";
	$Database = "xxx";
	
	$zeitraum = $_GET['zeitraum'];
	
	$DatabasePointer = mysql_connect($DatabaseHost, $DatabaseUser, $DatabasePassword);
	mysql_select_db($Database, $DatabasePointer);
	
	$ResultPointer = mysql_query("SELECT sum(zeit) Arbeitsstunden, DAYNAME(datum) Zeitraum FROM stundenzettel WHERE kundennummer = '05005' AND WEEK(datum,1) = '16' GROUP BY Zeitraum ORDER BY Zeitraum", $DatabasePointer);
	
	header("Content-type: image/png");
	
	for($i=0, $XWerte="", $YWerte=""; $i<mysql_num_rows($ResultPointer); $i++)
	{
	   $Besucher = mysql_fetch_object($ResultPointer);
	   $YWerte[] = $Besucher->Arbeitsstunden;
	   $XWerte[] = $Besucher->Zeitraum;
	}
	
	$XMin = 0;
	$XMax = count($XWerte);
	
	$Tmp = $YWerte;
	sort($Tmp);
	$YMin = $Tmp[0];
	rsort($Tmp);
	$YMax = $Tmp[0];

	$Grafik = imagecreatetruecolor($Diagrammbreite, $Diagrammhoehe);
	
	$Textfarbe = imagecolorallocate($Grafik, $TextfarbeR, $TextfarbeG, $TextfarbeB);
	$Hintergrundfarbe = imagecolorallocate($Grafik, $HintergrundfarbeR, $HintergrundfarbeG, $HintergrundfarbeB);
	$HintergrundfarbeAuswertungsbereich = imagecolorallocate($Grafik, $HintergrundfarbeAuswertungsbereichR, $HintergrundfarbeAuswertungsbereichG, $HintergrundfarbeAuswertungsbereichB);
	$Achsenfarbe = imagecolorallocate($Grafik, $AchsenfarbeR, $AchsenfarbeG, $AchsenfarbeB);
	$Balkenfarbe = imagecolorallocate($Grafik, $BalkenfarbeR, $BalkenfarbeG, $BalkenfarbeB);
	
	//Allgemeinen Hintergrund und Auswertungsbereich einfärben
	
	imagefill($Grafik, 0, 0, $Hintergrundfarbe);
	imagefilledrectangle($Grafik, $AbstandAussen+$RandLinks, $AbstandAussen+$RandOben, $Diagrammbreite-1-$AbstandAussen-$RandRechts, $Diagrammhoehe-1-$AbstandAussen-$RandUnten, $HintergrundfarbeAuswertungsbereich);
	
	//Allgemeine Berechnungen zur X- und Y-Achse
	
	if($YMax>10)
	{
	   $YMaxAbstand = 10;
	}
	else
	{
	   $YMaxAbstand = $YMax;
	}
	
	$YAbstand = ($Diagrammhoehe-2*$AbstandAussen-$RandOben-$RandUnten-10)/$YMaxAbstand;
	$YWertHoehe = ($Diagrammhoehe-2*$AbstandAussen-$RandOben-$RandUnten-10)/$YMax;
	$XAbstand = ($Diagrammbreite-2*$AbstandAussen-$RandRechts-$RandLinks-10)/$XMax;
	$Balkendicke = ($XAbstand-4)/2;
	
	//Hilfslinien einzeichnen
	
	imagesetstyle($Grafik, array($Achsenfarbe, $Achsenfarbe, IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT));
	
	for($i=0; $i<$YMaxAbstand; $i++)
	{
	   imageline($Grafik, $AbstandAussen+$RandLinks, $AbstandAussen+$RandOben+10+($YAbstand*$i), $Diagrammbreite-$AbstandAussen-$RandRechts-1, $AbstandAussen+$RandOben+10+($YAbstand*$i), IMG_COLOR_STYLED);
	}
	
	//X-Achse einzeichnen
	
	imageline($Grafik, $AbstandAussen+$RandLinks, $Diagrammhoehe-$AbstandAussen-$RandUnten, $Diagrammbreite-$AbstandAussen-$RandRechts, $Diagrammhoehe-$AbstandAussen-$RandUnten, $Achsenfarbe);
	imageline($Grafik, $AbstandAussen+$RandLinks, $Diagrammhoehe-$AbstandAussen-$RandUnten-1, $Diagrammbreite-$AbstandAussen-$RandRechts, $Diagrammhoehe-$AbstandAussen-$RandUnten-1, $Achsenfarbe);
	for($i=0; $i<$XMax; $i++)
	{
	   imageline($Grafik, $AbstandAussen+$RandLinks+($XAbstand*$i)+($XAbstand/2+3), $Diagrammhoehe-$AbstandAussen-$RandUnten-2, $AbstandAussen+$RandLinks+($XAbstand*$i)+($XAbstand/2+3), $Diagrammhoehe-$AbstandAussen-$RandUnten+2, $Achsenfarbe);
	   imagestringup($Grafik, 2, $AbstandAussen+$RandLinks+($XAbstand*$i)+($XAbstand/2)-3, $Diagrammhoehe-$AbstandAussen-$RandUnten+4+(imagefontwidth(2)*strlen($zeitraum.' '.$XWerte[$i])), $zeitraum.' '.$XWerte[$i], $Achsenfarbe);
	}
	
	//Y-Achse einzeichnen
	
	imageline($Grafik, $AbstandAussen+$RandLinks, $AbstandAussen+$RandOben, $AbstandAussen+$RandLinks, $Diagrammhoehe-$AbstandAussen-$RandUnten, $Achsenfarbe);
	imageline($Grafik, $AbstandAussen+$RandLinks+1, $AbstandAussen+$RandOben, $AbstandAussen+$RandLinks+1, $Diagrammhoehe-$AbstandAussen-$RandUnten, $Achsenfarbe);
	for($i=0; $i<=$YMaxAbstand; $i++)
	{
	   imageline($Grafik, $AbstandAussen+$RandLinks-2, $AbstandAussen+$RandOben+10+($YAbstand*$i), $AbstandAussen+$RandLinks+2, $AbstandAussen+$RandOben+10+($YAbstand*$i), $Achsenfarbe);
	   if($YMax>10)
	   {
		  imagestring($Grafik, 2, $AbstandAussen+$RandLinks-4-(imagefontwidth(2)*strlen(round($YMax-(($YMax/10)*$i), 0))), $AbstandAussen+$RandOben+10-(imagefontheight(1)/2)+($YAbstand*$i), round($YMax-(($YMax/10)*$i), 0), $Achsenfarbe);
	   }
	   else
	   {
		  imagestring($Grafik, 2, $AbstandAussen+$RandLinks-4-(imagefontwidth(2)*strlen($YMax-$i)), $AbstandAussen+$RandOben+10-(imagefontheight(1)/2)+($YAbstand*$i), $YMax-$i, $Achsenfarbe);
	   }
	}
	
	//Werte einzeichnen
	
	for($i=0; $i<$XMax; $i++)
	{
	   imagerectangle($Grafik, $AbstandAussen+$RandLinks+($XAbstand*($i+1))-($XAbstand/2-3)-$Balkendicke, $Diagrammhoehe-$AbstandAussen-$RandUnten-($YWertHoehe*$YWerte[$i]), $AbstandAussen+$RandLinks+($XAbstand*($i+1))-($XAbstand/2-3)+$Balkendicke, $Diagrammhoehe-$AbstandAussen-$RandUnten, $Achsenfarbe);
	   imagefilledrectangle($Grafik, $AbstandAussen+$RandLinks+($XAbstand*($i+1))-($XAbstand/2-3)-$Balkendicke+1, $Diagrammhoehe-$AbstandAussen-$RandUnten-($YWertHoehe*$YWerte[$i])+1, $AbstandAussen+$RandLinks+($XAbstand*($i+1))-($XAbstand/2-3)+$Balkendicke-1, $Diagrammhoehe-$AbstandAussen-$RandUnten-2, $Balkenfarbe);
	}
	
	//Diagrammtitel einzeichnen
	
	imagestring($Grafik, 5, $AbstandAussen+$RandLinks+($Diagrammbreite-(2*$AbstandAussen+$RandLinks+$RandRechts)-imagefontwidth(5)*strlen($Diagrammtitel))/2, $AbstandAussen, $Diagrammtitel, $Textfarbe);
	
	imagepng($Grafik);
	imagedestroy($Grafik);
?>

Hoffe das ihr mir helfen könnt.
 

Anhänge

  • diagramm.png
    diagramm.png
    1,2 KB · Aufrufe: 12
Hi,

wenn ich dich richtig verstanden hab:
Lass am Ende einfach nochmal eine Schleife drüberlaufen die prüft ob ein Wert für jeden Wochentag vorhanden ist, und wenn nicht, 0 setzen.


Gruß
 
Ja du hast das richtig verstanden und die Idee von dir ist mir auch gekommen nur leider bekomme ich genau das einfach nicht hin.
 
Zurück