Поиск по массиву и перемещение курсора
GET'ом отправляю значение (дату) в переменную.
Задача состоит в том, чтобы fgetcsv() выводила данные в массив не с начала файла, а со строки, которой соответствует значение отправленной переменно (дата).
Мой csv:
25.12, 24, 48,
26.12, 25, 57,
27.12, 21, 57,
28.12, 01, 58,
29.12, 44, 45,
30.12, 22, 54,
31.12, 31, 44,
На страничке есть форма, куда нужно ввести дату, с которой должны выводится данные.
Например с 27.12
Вот сам скрипт:
$c = 0;
$x =0;
$f = 0;
$r=0;
/* gets data from csv file */
while (($adata = fgetcsv($handle, 1000, ",")) !== FALSE) {
/* stores dates as variable $date */
$datexx[$x] = $adata[0];
$x++;
$date[$c] = $adata[1];
$c++;
$dateff[$f] = $adata[2];
$f++;
/* inserts defect data into html code */
}
$contents = file_get_contents("test.csv"); //читаем csv
$contents = substr($contents, strpos($date)); //режем лишнее
$adata = str_getcsv($contents); //парсим csv
unset($contents); //чистим память
Пока ждал ответа немножко посидел сам и сделал такой вариант:
{
$ot = $_GET["first"];
$do = $_GET["second"];
$good = array_keys ($datexx, $ot);
foreach($good as $k=>$v);
$kolichestvo = count($date);
$gooddo = array_keys ($datexx, $do);
foreach($gooddo as $kdo=>$vdo);
$kolsim = $vdo - $v;
$newdatexx = array_slice($datexx, $v, $kolsim);
$newdate = array_slice($date, $v, $kolsim);
$newdateff = array_slice($dateff, $v, $kolsim);
Кстати, массив разивается на "столбики". не знаю терминалогию, ибо с php сталкнулся впервые.
Вот первый кусок кода:
while (($adata = fgetcsv($handle, 1000, ",")) !== FALSE) {
/* stores dates as variable $date */
$datexx[$x] = $adata[0];
$x++;
$date[$c] = $adata[1];
$c++;
$dateff[$f] = $adata[2];
$f++;
}
$first = $_GET["first"];
$second = $_GET["second"];
$start = strpos($contents, $first); //ищем начало
if ($start === false) { die("Дата {$first} не найдена"); }
$end = strpos($contents, $second, $first); //ищем конец
if ($end === false) { die("Дата {$second} не найдена"); }
$contents = substr($contents, $start, $end - $start); //режем лишнее
$adata = str_getcsv($contents); //парсим csv
unset($contents); //чистим память
print_r($adata); //смотрим, что получилось
ps: необходимо учесть, что требуется обработка переданных пользователем данных и логических ошибок
тогда вместо $adata = str_getcsv($contents); //парсим csv
пишем
foreach ($items as $value) { //работаем построчно (для каждой строки)
$adata = str_getcsv($value); //парсим csv
//ваши данные [] - добавление нового элемента
$datexx[] = $adata[0];
$date[] = $adata[1];
$dateff[] = $adata[2];
}
unset($items); //чистим память
...
while (($adata = fgetcsv($handle, 1000, ",")) !== FALSE) {
if (!$do_add) { $do_add = $adata[0] == $first; }
if ($do_add) { $do_add = $adata[0] != $second; }
if ($do_add) {
$datexx[] = $adata[0];
$date[] = $adata[1];
$dateff[] = $adata[2];
}
}
Если есть вторая, то сначала и до второй.
Если обе, то с первой до второй.
Кстати, не понимаю условие отбора в приведенном выше примере.
Есть еще масса вопросов.
Каким образом вывести результат выполнения скрипта с параметрами на html страницу?
<head>
</head>
<body>
<img src = "new.php">
<FORM ACTION="new.php" METHOD="GET">
<INPUT TYPE="text" NAME="first" SIZE="100" MAXLENGTH="100">
<INPUT TYPE="text" NAME="second" SIZE="100" MAXLENGTH="100">
<INPUT TYPE="Submit" VALUE="Построить">
</FORM>
</HTML>
</body>
</html>
После ввода даты переадресовывает на new.php?first=параметр&second=параметр.
Хотелось бы, чтобы после ввода данных и нажатия на кнопку, т.е. выполнения скрипта выводился на той же странице результат выполнения скрипта, т.к. там находятся формы ввода. Подумывал о варианте с frame, но думаю есть более правильно решение.
Даннык в csv имеют вид:
24.12 23:18, 24, 48,
24.12 23:20, 25, 57,
25.12 00:12, 21, 57,
25.12 00:15, 01, 58,
25.12 00:20, 44, 45,
Можно ли в таком случае реальзовать выборку из массива по датам, без времени?
Т.е. необходимо сделать, чтобы указав в запросе 25.12 данные выводились бы начиная с певрого совпадения, то бишь эти 25.12 00:12, 21, 57 ?
Как я понимаю, нужно построчно проверять на совпадение 25.12? Как это реализуется?
Прошу прощения за большое количество вопросов, возможно не интересных или даже глупых, за не знание терминалогии.
verybadbug, Вам отдельное человеческое спасибо... Вы единственный, кто откликнулся из 3 крупных форумов... Везде только выпендриваются, кидаются ссылками, или рассказывают обо всем в общих словах, что я и сам в состоянии понять. Низкий Вам поклон
Пока писал мысль пришла. А ведь на сколько я знаю можно сделать 3 выпадающих списка соответственно: год, месяц, дата и выбрав данные и отправив сделать так, чтобы скрипт сформировал данные в переменную. Не могу нормально излагаться. В общем выбрали год, месяц, день и скрипт сложил бы эти данные в 10.12.2009, записал их в переменную и ее принял бы, например за начальную дату и так же с конечной. Это же реально сделать, не правда ли? И мне помниться я где-то встречал функции для работы с текстом, слияние слов, строк и прочего. Даже, если я не ошибаюсь, если переменные имеют строковые значения то простым $a = хорошая $b= корова $x = $a + $b в результате Хорошаякорова? Конечно могу ошибаться. Очень на мой взгляд интересная мысль, хотя она наверно просатая и всё этим пользуются...
Что думаете по этому поводу? Реально ли? Сложно? Возможно? Рабочему примеру цены бы не было.
verybadbug, конечно же вся надежда на Вас.
//функции для построения списков
function day_options($current) {
$r = "";
for ($i = 1; $i <= 31; $i++) {
$s = $i == $current ? " selected" : "";
$r .= "<option value=\"{$i}\"{$s}>{$i}</option>";
}
}
function month_options($current) {
$month_names = array("Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек");
$r = "";
for ($i = 1; $i <= 12; $i++) {
$s = $i == $current ? " selected" : "";
$r .= "<option value=\"{$i}\"{$s}>" . $month_names[$i] . "</option>";
}
}
function year_options($current) {
$r = "";
$i_max = date("Y");
for ($i = $i_max - 5; $i <= $i_max; $i++) {
$s = $i == $current ? " selected" : "";
$r .= "<option value=\"{$i}\"{$s}>{$i}</option>";
}
}
//читаем параметры
$start_day = 0 + (array_key_exists("start_day", $_GET) ? $_GET["start_day"] : 0);
$start_month = 0 + (array_key_exists("start_month", $_GET) ? $_GET["start_month"] : 0);
$start_year = 0 + (array_key_exists("start_year", $_GET) ? $_GET["start_year"] : 0);
$end_day = 0 + (array_key_exists("end_day", $_GET) ? $_GET["end_day"] : 0);
$end_month = 0 + (array_key_exists("end_month", $_GET) ? $_GET["end_month"] : 0);
$end_year = 0 + (array_key_exists("end_year", $_GET) ? $_GET["end_year"] : 0);
//необходимая обработка данных
$page_content = "";
if ($start_day) { $page_content = "ля-ля-ля"; }
?>
<form>
<select name="start_day"><? print(day_options($start_day)) ?></select>
<select name="start_month"><? print(day_options($start_month)) ?></select>
<select name="start_year"><? print(day_options($start_year)) ?></select> <br />
<select name="end_day"><? print(day_options($end_day)) ?></select>
<select name="end_month"><? print(day_options($end_month)) ?></select>
<select name="end_year"><? print(day_options($end_year)) ?></select> <br />
<input type="submit" />
</form>
<? if ($page_content != "") { print($page_content); } ?>
Можно ли в таком случае реальзовать выборку из массива по датам, без времени?
...
while (($adata = fgetcsv($handle, 1000, ",")) !== FALSE) {
if (!$do_add) { $do_add = substr($adata[0], 0, 5) == $first; } //при снятом флаге: если строка соответствует первой дате - устанавливаем флаг
if ($do_add) {
$do_add = substr($adata[0], 0, 5) != $second; //при установленном флаге: если строка соответствует второй дате - снимаем флаг
break;
}
if ($do_add) { //если флаг установлен - добавляем данные из текущей строки
$datexx[] = $adata[0];
$date[] = $adata[1];
$dateff[] = $adata[2];
}
}
эх... не хотите даже немного головой паработать (и поиском)
verybadbug, результат выполнения скрипта таков:
Необходимо, чтобы за выбранный период в 3 переменных записывалось: В $data1 - даты, в $data2 - значение, $data3 - значение. Могли бы так сделать?
А вообще классно... Спасибо Вам огромнейшее. Я, правда, в Вашем коде почти ничего не понимаю.
verybadbug, мне правдо очень стыдно, что я Вас терроризирую. Но просто не реально самому за такой короткий срок разобраться.
А поиском мы работаем...
$data[] = $adata;
}
пишем
$data1[] = $adata[0];
$data2[] = $adata[1];
$data3[] = $adata[2];
}
тот результат, что вы указали в предыдущем посте - вывод переменной (print_r($data)). замените этот вывод на то, что необходимо вам
Вы явно выводите html, а потом уже отправляете заголовки, что и влечет ошибку.
если есть необходимость отображать рисунок в документе html - добавляем в приложение обработчик изображения ОТДЕЛЬНЫМ ФАЙЛОМ
...
<img src="image.php?mydata[0]=a&mydata[1]=b&mydata[2]=c">
...
//=====в файле image.php=====
$mydata = $_GET["mydata"]; //читаем массив из параметров запроса
// пример из мануала
$im = imagecreatetruecolor(120, 20);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color);
imagejpeg($im);
// Free up memory
imagedestroy($im);
В work.php:
$date = $_GET["date"];
$dateff = $_GET["dateff"];
Переменные пусты. Данные не передались.
почему вы так решили?
приведите полный код work.php
require_once ('jpgraph.php');
require_once ('jpgraph_line.php');
require_once ('jpgraph_scatter.php');
require_once ('jpgraph_regstat.php');
$datexx = $_GET["datexx"];
$date = $_GET["date"];
$dateff = $_GET["dateff"];
$timer = new JpgTimer();
$timer->Push();
// Create the graph. These two calls are always required
$graph = new Graph(800,500);
$graph->SetScale("textlin");
$graph->SetMargin(40,20,20,90);
$graph->title->Set("Timing a graph");
$graph->footer->right->Set('Timer (ms): ');
$graph->footer->right->SetFont(FF_COURIER,FS_ITALIC);
$graph->footer->SetTimer($timer);
// Create the linear plot
$lineplot=new LinePlot($date);
$lineplot2=new LinePlot($dateff);
// Add the plot to the graph
$graph->Add($lineplot);
$graph->Add($lineplot2);
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
$lineplot->SetColor("blue");
$lineplot->SetWeight(2);
$lineplot2->SetColor("orange");
$lineplot2->SetWeight(2);
$graph->yaxis->SetColor("red");
$graph->yaxis->SetWeight(2);
$graph->SetShadow();
//$datax = $gDateLocale->GetShortMonth();
$graph->xaxis->SetTickLabels($datexx);
$graph->xaxis->SetLabelAngle(90);
$graph->xaxis->SetLabelMargin(5);
$graph->xaxis->SetTextLabelInterval(3); //интервал через который показываются xaxis надписи
//$graph->xaxis->SetTextTickInterval(3,5); // интервал отметок axis
// Display the graph
$graph->Stroke();
?>
print_r ($datexx );
ничего не выводит
Делаю с фреймами, показалось проще.
Если это не так, можно и без них
Если work.php - это фрейм, то использовать $graph->Stroke(); бессмысленно!
Если work.php - это изображение, для проверки в самом начале пишем print_r($_GET);die();, в адресной строке браузера пишем ваш_сайт/work.php?datexx=data1&dare=data2&datett=data3
что видим???
Видим
Но ведь чтобы массивы записались в datexx, date и dateff необходимо сначала выполнить index.php, правильно я понимаю?
убираем print_r($_GET);die();
в конце убираем $graph->Stroke();
проверяем тотже адрес...
ошибки выдает?
проверяем адрес...
Не возможно определить мин и мах значения по оси Y.
Тольно null значения.
Судя по всему это потому, что массивы datexx, date и dateff пусты.
Само собой они пусты так как они формируются в index.php
?datexx[0]=1&datexx[1]=2&date[0]=3&date[1]=4&datett[0]=5&datett[1]=6
если будем обходиться без них, то в index.php пишем в конце (для проверки)
если график вывелся - то осталось сгенерить тег img в соответствии с запросом пользователя
Фреймами воспользовался, когда встала проблема одновременного отображения texarea с кнопкой и вывода самого графика. Отправлял данные GETом, потом скрипт отбирал данные и рисовал график.
График вывелся
Так значений то будет не 2 и не 5, а сотни. Получается будет неимоверной длинны url?
<img src="work.php?datexx=data1&date=data2&dateff=data3">
Почему-то не работает
$end_date = "{$s_end_day}.{$s_end_month}";
$do_add = ($start) ? false : true; //флаг добавления
$contents = file_get_contents("test.csv"); //читаем csv как текст
$items = explode("\n", str_replace("\r", "", $contents)); //преобразуем текст в массив строк
$data = array();
foreach ($items as $value) { //работаем построчно (для каждой строки)
$adata = str_getcsv($value); //парсим csv
if (!$do_add) { $do_add = substr($adata[0], 0, 5) == $start_date; } //при снятом флаге: если строка соответствует первой дате - устанавливаем флаг
if ($do_add) {
$do_add = substr($adata[0], 0, 5) != $end_date; //при установленном флаге: если строка соответствует второй дате - снимаем флаг
if (!$do_add) { break; }
}
if ($do_add) { //если флаг установлен - добавляем данные из текущей строки
$data1[] = $adata[0];
$data2[] = $adata[1];
$data3[] = $adata[2];
}
}
}
unset($items);
unset($contents);
а далее использовать массивы data1 data2 data3. Правильно я Вас понял?
Почему же тогда, написав <?php print_r ($data2); ?> выводится массив?
Мне это нужно делать?
require_once("str_getcsv.php"); //для php < 5.3
require_once ('jpgraph.php');
require_once ('jpgraph_line.php');
require_once ('jpgraph_scatter.php');
require_once ('jpgraph_regstat.php');
//функции для построения списков
function day_options($current) {
$r = "";
for ($i = 1; $i <= 31; $i++) {
$s = $i == $current ? " selected" : "";
$r .= "<option value=\"{$i}\"{$s}>{$i}</option>";
}
return $r;
}
function month_options($current) {
$month_names = array("Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек");
$r = "";
for ($i = 1; $i <= 12; $i++) {
$s = $i == $current ? " selected" : "";
$r .= "<option value=\"{$i}\"{$s}>" . $month_names[$i - 1] . "</option>";
}
return $r;
}
function year_options($current) {
$r = "";
$year = date("Y");
for ($i = 0; $i <= 5; $i++) {
$y = $year - $i;
$s = $y == $current ? " selected" : "";
$r .= "<option value=\"{$y}\"{$s}>{$y}</option>";
}
return $r;
}
//читаем параметры
$start_day = 0 + (array_key_exists("start_day", $_GET) ? $_GET["start_day"] : 0);
$start_month = 0 + (array_key_exists("start_month", $_GET) ? $_GET["start_month"] : 0);
$start_year = 0 + (array_key_exists("start_year", $_GET) ? $_GET["start_year"] : 0);
$end_day = 0 + (array_key_exists("end_day", $_GET) ? $_GET["end_day"] : 0);
$end_month = 0 + (array_key_exists("end_month", $_GET) ? $_GET["end_month"] : 0);
$end_year = 0 + (array_key_exists("end_year", $_GET) ? $_GET["end_year"] : 0);
//определяем необходимость обработки данных
$start = $start_day && $start_month && $start_year;
$end = $end_day && $end_month && $end_year;
//необходимая обработка данных
$page_content = "";
if ($start || $end) {
//день и масяц - двузначные числа
$s_start_day = "" . $start_day; while (strlen($s_start_day) < 2) { $s_start_day = "0{$s_start_day}"; }
$s_start_month = "" . $start_month; while (strlen($s_start_month) < 2) { $s_start_month = "0{$s_start_month}"; }
$s_end_day = "" . $end_day; while (strlen($s_end_day) < 2) { $s_end_day = "0{$s_end_day}"; }
$s_end_month = "" . $end_month; while (strlen($s_end_month) < 2) { $s_end_month = "0{$s_end_month}"; }
//выводим начало и конец
if ($start) { $page_content .= "Начало: {$s_start_day}.{$s_start_month}.{$start_year}<br />"; }
if ($end) { $page_content .= "Конец: {$s_end_day}.{$s_end_month}.{$end_year}<br />"; }
}
unset($items);
unset($contents);
?>
<form action = "work.php" method = "GET">
<select name="start_day"><option></option><? print(day_options($start_day)) ?></select>
<select name="start_month"><option></option><? print(month_options($start_month)) ?></select>
<select name="start_year"><option></option><? print(year_options($start_year)) ?></select> <br />
<select name="end_day"><option></option><? print(day_options($end_day)) ?></select>
<select name="end_month"><option></option><? print(month_options($end_month)) ?></select>
<select name="end_year"><option></option><? print(year_options($end_year)) ?></select> <br />
<input type="submit" />
</form>
<? if ($page_content != "") { print($page_content); } ?>
work.php:
require_once ('jpgraph.php');
require_once ('jpgraph_line.php');
require_once ('jpgraph_scatter.php');
require_once ('jpgraph_regstat.php');
require_once("str_getcsv.php"); //для php < 5.3
$start_day = $_GET["start_day"];
$start_month = $_GET["start_month"];
$start_year = $_GET["start_year"];
$end_day = $_GET["end_day"];
$end_month = $_GET["end_month"];
$end_year = $_GET["end_year"];
//обработка данных
$start_date = "{$s_start_day}.{$s_start_month}";
$end_date = "{$s_end_day}.{$s_end_month}";
$do_add = ($start) ? false : true; //флаг добавления
$contents = file_get_contents("test.csv"); //читаем csv как текст
$items = explode("\n", str_replace("\r", "", $contents)); //преобразуем текст в массив строк
$data = array();
foreach ($items as $value) { //работаем построчно (для каждой строки)
$adata = str_getcsv($value); //парсим csv
if (!$do_add) { $do_add = substr($adata[0], 0, 5) == $start_date; } //при снятом флаге: если строка соответствует первой дате - устанавливаем флаг
if ($do_add) {
$do_add = substr($adata[0], 0, 5) != $end_date; //при установленном флаге: если строка соответствует второй дате - снимаем флаг
if (!$do_add) { break; }
}
if ($do_add) { //если флаг установлен - добавляем данные из текущей строки
$data1[] = $adata[0];
$data2[] = $adata[1];
$data3[] = $adata[2];
}
}
$timer = new JpgTimer();
$timer->Push();
// Create the graph. These two calls are always required
$graph = new Graph(800,500);
$graph->SetScale("textlin");
$graph->SetMargin(40,20,20,150);
$graph->title->Set("Timing a graph");
$graph->footer->right->Set('Timer (ms): ');
$graph->footer->right->SetFont(FF_COURIER,FS_ITALIC);
$graph->footer->SetTimer($timer);
// Create the linear plot
$lineplot=new LinePlot($data2);
$lineplot2=new LinePlot($data3);
// Add the plot to the graph
$graph->Add($lineplot);
$graph->Add($lineplot2);
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
$lineplot->SetColor("blue");
$lineplot->SetWeight(2);
$lineplot2->SetColor("orange");
$lineplot2->SetWeight(2);
$graph->yaxis->SetColor("red");
$graph->yaxis->SetWeight(2);
$graph->SetShadow();
//$datax = $gDateLocale->GetShortMonth();
$graph->xaxis->SetTickLabels($data1);
$graph->xaxis->SetLabelAngle(90);
$graph->xaxis->SetLabelMargin(5);
$graph->xaxis->SetTextLabelInterval(3); //интервал через который показываются xaxis надписи
//$graph->xaxis->SetTextTickInterval(3,5); // интервал отметок axis
// Display the graph
$graph->Stroke();
?>
Выводит график на основе всех данных. Т.е. отбор по данным не происходит.
И выводится график на другой странице
И выводится график на другой странице
[SIZE="1"][COLOR="Silver"]verybadbug, у меня надежда только на Вас, пожалуйста, помогите. Осталось, как мне кажется совсем ничего.
С меня коньяк, или пиво. В общем как пожелаете.[/COLOR][/SIZE]
//функции для построения списков
function day_options($current) {
$r = "";
for ($i = 1; $i <= 31; $i++) {
$s = $i == $current ? " selected" : "";
$r .= "<option value=\"{$i}\"{$s}>{$i}</option>";
}
return $r;
}
function month_options($current) {
$month_names = array("Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек");
$r = "";
for ($i = 1; $i <= 12; $i++) {
$s = $i == $current ? " selected" : "";
$r .= "<option value=\"{$i}\"{$s}>" . $month_names[$i - 1] . "</option>";
}
return $r;
}
function year_options($current) {
$r = "";
$year = date("Y");
for ($i = 0; $i <= 5; $i++) {
$y = $year - $i;
$s = $y == $current ? " selected" : "";
$r .= "<option value=\"{$y}\"{$s}>{$y}</option>";
}
return $r;
}
//читаем параметры
$start_day = 0 + (array_key_exists("start_day", $_GET) ? $_GET["start_day"] : 0);
$start_month = 0 + (array_key_exists("start_month", $_GET) ? $_GET["start_month"] : 0);
$start_year = 0 + (array_key_exists("start_year", $_GET) ? $_GET["start_year"] : 0);
$end_day = 0 + (array_key_exists("end_day", $_GET) ? $_GET["end_day"] : 0);
$end_month = 0 + (array_key_exists("end_month", $_GET) ? $_GET["end_month"] : 0);
$end_year = 0 + (array_key_exists("end_year", $_GET) ? $_GET["end_year"] : 0);
//определяем необходимость обработки данных
$start = $start_day && $start_month && $start_year;
$end = $end_day && $end_month && $end_year;
//необходимая обработка данных
$page_content = "";
if ($start || $end) {
//день и масяц - двузначные числа
$s_start_day = "" . $start_day; while (strlen($s_start_day) < 2) { $s_start_day = "0{$s_start_day}"; }
$s_start_month = "" . $start_month; while (strlen($s_start_month) < 2) { $s_start_month = "0{$s_start_month}"; }
$s_end_day = "" . $end_day; while (strlen($s_end_day) < 2) { $s_end_day = "0{$s_end_day}"; }
$s_end_month = "" . $end_month; while (strlen($s_end_month) < 2) { $s_end_month = "0{$s_end_month}"; }
//выводим начало и конец
if ($start) { $page_content .= "Начало: {$s_start_day}.{$s_start_month}.{$start_year}<br />"; }
if ($end) { $page_content .= "Конец: {$s_end_day}.{$s_end_month}.{$end_year}<br />"; }
//выводим график
$s = "";
if ($start) { $s .= "start=" . mktime(0, 0, 0, $start_month, $start_day, $start_year) . "&"; }
if ($end) { $s .= "end=" . mktime(0, 0, 0, $end_month, $end_day, $end_year) . "&"; }
$s = substr($s, 0, -1);
$page_content .= "<img src=\"work.php?{$s}\" /><br />";
}
unset($items);
unset($contents);
?>
<form>
<select name="start_day"><option></option><? print(day_options($start_day)) ?></select>
<select name="start_month"><option></option><? print(month_options($start_month)) ?></select>
<select name="start_year"><option></option><? print(year_options($start_year)) ?></select> <br />
<select name="end_day"><option></option><? print(day_options($end_day)) ?></select>
<select name="end_month"><option></option><? print(month_options($end_month)) ?></select>
<select name="end_year"><option></option><? print(year_options($end_year)) ?></select> <br />
<input type="submit" />
</form>
<? if ($page_content != "") { print($page_content); } ?>
work.php
require_once("str_getcsv.php"); //для php < 5.3
$start = array_key_exists("start", $_GET) ? $_GET["start"] : 0;
$end = array_key_exists("end", $_GET) ? $_GET["end"] : 0;
//обработка данных
$start_date = date("d.m", $start);
$end_date = date("d.m", $end);
$do_add = ($start) ? false : true; //флаг добавления
$contents = file_get_contents("test.csv"); //читаем csv как текст
$items = explode("\n", str_replace("\r", "", $contents)); //преобразуем текст в массив строк
$data = array();
foreach ($items as $value) { //работаем построчно (для каждой строки)
$adata = str_getcsv($value); //парсим csv
if (!$do_add) { $do_add = substr($adata[0], 0, 5) == $start_date; } //при снятом флаге: если строка соответствует первой дате - устанавливаем флаг
if ($do_add) {
$do_add = substr($adata[0], 0, 5) != $end_date; //при установленном флаге: если строка соответствует второй дате - снимаем флаг
if (!$do_add) { break; }
}
if ($do_add) { //если флаг установлен - добавляем данные из текущей строки
$data1[] = $adata[0];
$data2[] = $adata[1];
$data3[] = $adata[2];
}
}
require_once ('jpgraph.php');
require_once ('jpgraph_line.php');
require_once ('jpgraph_scatter.php');
require_once ('jpgraph_regstat.php');
$timer = new JpgTimer();
$timer->Push();
// Create the graph. These two calls are always required
$graph = new Graph(800,500);
$graph->SetScale("textlin");
$graph->SetMargin(40,20,20,150);
$graph->title->Set("Timing a graph");
$graph->footer->right->Set('Timer (ms): ');
$graph->footer->right->SetFont(FF_COURIER,FS_ITALIC);
$graph->footer->SetTimer($timer);
// Create the linear plot
$lineplot=new LinePlot($data2);
$lineplot2=new LinePlot($data3);
// Add the plot to the graph
$graph->Add($lineplot);
$graph->Add($lineplot2);
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
$lineplot->SetColor("blue");
$lineplot->SetWeight(2);
$lineplot2->SetColor("orange");
$lineplot2->SetWeight(2);
$graph->yaxis->SetColor("red");
$graph->yaxis->SetWeight(2);
$graph->SetShadow();
//$datax = $gDateLocale->GetShortMonth();
$graph->xaxis->SetTickLabels($data1);
$graph->xaxis->SetLabelAngle(90);
$graph->xaxis->SetLabelMargin(5);
$graph->xaxis->SetTextLabelInterval(3); //интервал через который показываются xaxis надписи
//$graph->xaxis->SetTextTickInterval(3,5); // интервал отметок axis
// Display the graph
$graph->Stroke();
?>
ну если ради этого вы готовы приехать в Хабаровск - то без проблем :)
Благо - чтобы угостить сейчас совсем не обязательно приезжать =)
копи-паст того, что я скинул выше (index.php)
у меня всё происходит на одной странице
Есть еще один момент. Можно сделать, если не указаны даты, график выводился за все даты?