1) использовать переменные год и месяц удобно, так как дни идут, месяцы ползут и годы потихоньку пробираются. вот и временные переменные график должен сам определять, это универсально и гибко на мой взгляд 2) так как график это встроенный рисунок в таблице (iframe), которому выделено поле 100% на 100% ячейки, разумнее всего иметь "резиновый расчёт размеров", мониторы у всех разные... у босса 3840×2160 экран, а у кого-то 800×600, вот и "резиновость" может пригодится. 3)хорошо 4)в один день может быть только одна сумма, если в какой-то день суммы нет - линия не идёт на 0 а пропускает этот день 5) где))? p.s. модульный
И я о том же. Эти параметры должны рассчитываться автоматически, а не в скрипте, где идет вывод графика. Ваш файл test.txt Код (Text): 23072017 10000 24072017 10000 27072017 1000 19072017 10000 24072017 11000 27072017 1500 Я бы рекомендовал ООП, но можно и модульный. Только это опять будет каша из скриптов.
хорошо, в том примере скорее всего выгрузка из двух файлов без разделения, на данный момент в тестовом режиме два файла со следующим содержимым: Код (Text): plusXY.txt 23072017 10000 24072017 10000 27072017 51000 28072017 315000 30072017 50000 minusXY.txt 19072017 10000 24072017 11000 27072017 157000 28072017 600500 30072017 5000
@elektryk, по поводу представления графика: Код (Text): plusXY.txt 23072017 10000 24072017 10000 27072017 51000 28072017 315000 30072017 50000 Вот эти данные будут представлены (по Вашим словам) так: из 1го числа из 0 рублей выходит линия в 23 число в 10000 рублей, потом в 24 число в 10000 рублей и т.д. Правильно я Вас понял?
Я не экономист - спорить не буду) Вобщем, я предлагаю обойтись 3-мя классами: 1. Данные графика 2. Координатная сетка 3. Сам график
PHP: $width='<script>var ScreenWidth = screen.width; document.write(ScreenWidth);</script>'; $height='<script>var ScreenHeight = screen.height;document.write(ScreenHeight);</script>'; echo''.$width.' x '.$height.''; разрешение экрана
Так Вы не получите в php-скрипте разрешение экрана пользователя. Их не надо выводить пользователю на страницу - их надо отправить на сервер. Предположим у Вас скрипт grafik.php. К нему можно обратиться так: /grafik.php?y=2017&m=7&w=1200&h=920 , где w и h вычислить как у Вас в javascript.
переменные для графиков, где выдаются значения текущего месяца и года, в виде только дней месяца, упомянутых в текстовых файлах пример 27062017 - не прокатит, месяц уже 07 24072017 - прокатит , но на горизонтальной оси графика для X значение должно быть равно 24, при условии, что цифры с 1 по 31(конкретно для примера с июлем, как действующим месяцем) должны быть выведены на ось Х.
Вы пытаетесь решить несколько задач одновременно: выборка данных и сразу представление данных. А между ними еще и обработка должна быть. Решайте задачу последовательно. Сначала выборка: - все даты для июля этого года должны содержать на конце 072017 - их вместе с суммами надо куда-то "складывать" (можно в массив) Потом обработка: - я предлагаю все даты представить в виде объекта DateTime - потом отсортировать, на тот случай, если они не отсортированы в файле. - вычисление максимального значения суммы прихода/расхода - и т.п. И после этого вывод графика: - рисование сетки - рисование букв/цифр - рисование линий графика
используя баш, код выглядит так: Код (Text): dt=`date +%m%Y`; i="0"; cat plusXY.txt | grep $dt | sed 's/'$dt'//g' | while read X Y ; do i=$[$i+1] ; echo "тут координата X1($i)=$X а тут координата Y1($i)=$Y" ; done вывод: Код (Text): тут координата X1(1)=19 а тут координата Y1(1)=10000 тут координата X1(2)=24 а тут координата Y1(2)=11000 тут координата X1(3)=27 а тут координата Y1(3)=157000 тут координата X1(4)=28 а тут координата Y1(4)=600500 тут координата X1(5)=30 а тут координата Y1(5)=5000 --- Добавлено --- @denis01 спят все походу, а так хорошо начиналось(нужен конвертер bin/bash то php7)))шутка)))
PHP: $array = file('plusXY.txt'); $max_y = 0; $debet = []; foreach ( $array as $stroka ) { $parts = explode(' ', $stroka); if (preg_match('/072017$/', $parts[0])) { $debet[] = [ date_create_from_format( 'dmY', $parts[0] ), (int) $parts[1] ]; if($parts[1] > $max_y) { $max_y = (int) $parts[1]; } } } usort( $debet, function( $a, $b ) { return date_format($a[0], 'Ymd') - date_format($b[0], 'Ymd'); } ); Получится двумерный массив с числами и суммами. Ночь на дворе.
не секрет, нисколько, я хочу это оформить как GPL минималистический счётчик финансовых потоков, без заморочек на счёт документооборота, чеков, онлайн-банкинга, то есть, любой человек имея броузер и 2 кнопки на странице, и поле ввода будет знать свои расходы/доходы и остаток)
@elektryk, посмотрите на график, что Вы хотите увидеть: На нем плохо читаются суммы. Вот что предлагал я: Тоже не айс. Зато видно маржу. А вот, наверное, тот график, что Вам нужен:
первый- самый понятный для простого человека, второй не отдаёт немного картины приход-расход, третий хороший, но для глаза горизонтальные линии привычнее, чем вертикальные столбики) спасибо за примеры)
добрый день, с отсечением от даты никак не разберусь. PHP: $god = date('Y'); //значение текущего года $mesac = date('m'); //значение текущего месяца if (preg_match('/$mesac$god$/', $parts[0])) { $debet[] = [ date_create_from_format( 'dmY', $parts[0] ), (int) $parts[1] ];
@elektryk, если вставляете переменную в строку таким образом, то надо писать в двойных кавычках. И перед последним знаком доллара обратный слеш. PHP: "/$mesac$god\$/"
спасибо. PHP: $array = file('plusXY.txt'); $max_y = 0; $debet = []; foreach ( $array as $stroka ) { $parts = explode(' ', $stroka); if (preg_match("/$mesac$god\$/", $parts[0])) { $debet[] = [ date_create_from_format( 'dmY', $parts[0] ), (int) $parts[1] ]; if($parts[1] > $max_y) { $max_y = (int) $parts[1]; } } } usort( $debet, function( $a, $b ) { return date_format($a[0], 'Ymd') - date_format($b[0], 'Ymd'); } ); echo $max_y ; вот так? --- Добавлено --- первый график получает по горизонтальной оси цифры текущего месяца? и максимальное значение по вертикальной оси исходя из всех значений по выборке сумм текущего месяца?