Строим график

Статус
В этой теме нельзя размещать новые ответы.
Вобщем, т.к. вывод графика ограничивался максимальным размером массива, решил обойтись без него с сохранением результата в файл.
Вот что получилось:
PHP:
// Файл данных 
$filename = "data.txt";  
// проверяем наличие файла
if (!is_file($filename)) exit("Отсутсвует файл данных"); 
// Читаем содержимое файла 
$arr = file($filename); 
// Ширина изображения 
$width=count($arr);
// Вычисляем высоту изображения
$height=0;
foreach($arr as $line){ 
	$num = preg_split("|[;]+|",$line); 
	$height=max($height,(int)$num[2]);
}
// масштабируем
$height=$height/10;
$width=$width/100;
// Рисуем диаграмму  
$img = imagecreatetruecolor($width + 20,$height + 30);  
if (!$img) exit("Не удалось создать изображение");  
// Формируем цвета 
$white = imagecolorallocate($img, 255, 255, 255);  
$black = imagecolorallocate($img, 0, 0, 0);  
// Фон делаем белым 
imagefill($img, 1, 1, $white);  
// Делаем линии с подписями по У
$z=0;
$z1=50;
while($z<$height){
    imageline($img,0,$height-$z,$width,$height-$z,$black);
    imagestring($img,1,$width,$height-$z,$z*10,$black);
    $z=$z+$z1;
}
// Рисуем график
$x=0;
$hour1=-1;
$date1=0;
foreach($arr as $line){ 
    $num = preg_split("|[;]+|",$line); 
    $d_key = explode(".", $num[0]);
    $date  = mktime(0, 0, 0, (int)$d_key[1], (int)$d_key[0], (int)$d_key[2]);
    $hour=(int)$num[1];
    $usr=(int)$num[2];
	// определяем У
    $y=$height-$usr/10;
	// если сменился час - подписываем в соответствующем месте по Х
	if($hour>$hour1){
		imagestring($img,1,$x/100,$height+5,$hour,$black);
		$hour1=$hour;
	}
	// если сменилась дата - выводим вертикальную линию и подписываем в соответствующем месте по Х
	if($date>$date1){
		imagestring($img,1,$x/100,$height+15,date("Y-m-d",$date),$black);
		imageline($img,$x/100,0,$x1/100,$height+15,$black);
		$date1=$date;
		$hour1=-1;
	}
	// рисуем линию графика
	imageline($img,$x/100,$y,$x1/100,$y1,$black);
	$x1=$x;
	$y1=$y;
$x++;
} 
// сохраняем изображение в файл
imagejpeg($img, "graph.jpg", 70);  
// Отправляем изображение в окно браузера 
header ("Content-type: image/jpeg");  
imagejpeg($img);  
imagedestroy($img);
Всем спасибо.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху