Привет! Сделала форму денежных поступлений и расходов. Итог считается, данные добавляются, но очень хочется график по дням. Одна линия приход, вторая расход. файлы - index.txt (php) - основная форма - reg.txt (php) - обработчик post запросов с задержной в 1 сек(иначе incron не успевает) - graf.txt(php) - взятый извне график, в который и хочется передавать точки(дату+сумму задень) Помогите с массивом для графика. формат данных для линий приход (расход): 20170724 1000 (годмесяцдень) (сумма приходазадень)
Можно решить моим классом https://php.ru/forum/threads/generator-diagramm-grafikov-gotovoe-reshenie.33280/ PHP: <?php $diagram = new vsDiagram(1280, 720, 255, 255, 255); // холст 1280x720, белый фон $diagram->xRange(30); // 30 - число делений по X $diagram->yRange(ceil($max / 1000)); // $max - максимальный дневной доход или расход (какая цифра больше - та и берется) // число делений по Y будет кратно тысячам руб. $diagram->addPoly('red', 255, 0, 0) ->addPoly('black', 0, 0, 0); // красная и черная линия // в массивах $debet и $credit по 30 элементов // в качестве значений - сумма в рублях $day = 0; foreach ($debet as $value) { $diagram->addVertex('black', $day, $value); $day++; } $day = 0; foreach ($credit as $value) { $diagram->addVertex('red', $day, $value); $day++; } header('Content-Type: image/png'); echo $diagram;
Спасибо за ответ) сама проблема с вытягиванием данных в массив: формат данных для линий приход (расход): 20170724 1000 (годмесяцдень) (сумма приходазадень) идея, такая: так как первое число в любом из 2 текстовых файлов это ГодМесяцДень то в координатной сетке оно должно отображаться так: вместо нуля месяц, по горизонтальной линии дни, по вертикальной линии тысячи. пример графика, в котором его автором явно указывается каждая координата, я довольна, но вот как из 2 текстовых файлов подсунуть координаты, ума не приложу( у автора такие значения: //задаем массивы данных графиков // $x1[0]=8; $y1[0]=8; // $x1[1]=2; $y1[1]=4; // $x1[2]=3; $y1[2]=8; // $x1[3]=4; $y1[3]=16; // $x2[0]=1.5; $y2[0]=2; // $x2[1]=2.5; $y2[1]=3; // $x2[2]=3.5; $y2[2]=9; // $x2[3]=4.5; $y2[3]=17;
можно начать сначала: текстовый файл с таким содержимым: cat "test.txt" 100 90 10 70 30 23 100 26 обработчик файла: test.php PHP: <?php $array = file("test.txt"); foreach ( $array as list($a, $b)) { echo "A: $a B: $b", "<br>";} ?> вывод на экран: A: B: A: B: A: B: A: B: хм, как исправить?
--- Добавлено --- Чтобы разделить строку на два элемента по пробелу, существует функция explode() Код (Text): $array = explode(' ', $string); --- Добавлено --- потом, если хочется, можно использовать list()
спасибо Аlexblack. как теперь это применить к моему графику, ведь это массив, с переменными и ключами. для X и Y нужны ещё ключи ($key) в формате $x($key) и $y(key$) ??
Уважаемый Admin форума, перенеси мою тему в раздел: Сделайте за меня. боюсь в этом разделе мало получится для решения моей проблемы ( --- Добавлено --- в моём понимании, если словами: читаем построчно файл X0Y0.txt при чтении разбиваем данные из каждой строки разделителем "пробел" и запоминаем номер строки всё это запоминаем в массив, где значения присваиваются следующим методом: $x0($(№строки))=ПервоеЗначениеИзСтрокиСтолбец1 $y0($(тот же №строки))=ПервоеЗначениеИзСтрокиСтолбец2 $x0($(№строки))=ВтороеЗначениеИзСтрокиСтолбец1 $y0($(тот же №строки))=ВтороеЗначениеИзСтрокиСтолбец2 ........ так? как это в виде кода увидеть? --- Добавлено --- Админу благодарность за оперативность))
всё, тишина, неужели никто не поможет из текстового файла вытянуть переменные --- Добавлено --- вот на баше однострочник: i="-1"; cat test.txt | while read a b ; do i=$[$i+1] ; echo "x0($i)=$a y0($i)=$b" ; done и его вывод: x0(0)=100 y0(0)=90 x0(1)=10 y0(1)=70 x0(2)=30 y0(2)=23 x0(3)=100 y0(3)=26 x0(4)=40 y0(4)=754 x0(5)=23 y0(5)=112 x0(6)=10 y0(6)=876 x0(7)=20 y0(7)=123 а как в php7 это сделать?
или со срезом по дням: d=`date +%m%Y` ; i="-1"; cat minusXY.txt | while read A B ; do i=$[$i+1] ;a=`echo $A | sed "s/$d//g"` ; b=$[$B/1000] ; echo "x0($i)=$a y0($i)=$b;" ; done x0(0)=23 y0(0)=10; x0(1)=24 y0(1)=10; x0(2)=27 y0(2)=1;
Ниче не ясно, сумбур какой-то. Что надо вообще, то ли точки не можешь достать, то ли график подписать днями вместо нулей. Не пойму ))) Берете какую-нибудь простую библиотеку pchart или что свежее я хз. Берете свои данные обрабатываете, чтобы получить точки за каждый день и рисуете. Вот пример: https://habrahabr.ru/post/205532/ 20 строчек кода и имеете то что хотите
задача: из текстового файла(прикреплён выше) создать массив, где первая колонка это x0, вторая y0, при этом каждая строка текстового файла должна быть ключом к этим значениям. пример переменных и значений в массиве: x0(0)=5 y0(0)=1 x0(1)=3 y0(1)=8 и так далее, то есть то что в скобках - это значение строки по очереди. график может принять только этот массив(пример кода графика прикреплён выше, название graf.txt) буду рада, если можно как то ещё сделать
@elektryk, Вы сами уже все написали и Вам уже подсказали где исправить: Получится: PHP: <?php $array = file("test.txt"); $x = []; $y = []; foreach ( $array as $stroka) { $parts = explode(' ', $stroka); $x[] = $parts[0]; $y[] = $parts[1]; } В результате получатся два массива: Код (Text): array(6) { [0]=> string(8) "23072017" [1]=> string(8) "24072017" [2]=> string(8) "27072017" [3]=> string(8) "19072017" [4]=> string(8) "24072017" [5]=> string(8) "27072017" } array(6) { [0]=> string(7) "10000" [1]=> string(7) "10000" [2]=> string(6) "1000" [3]=> string(7) "10000" [4]=> string(7) "11000" [5]=> string(4) "1500" } P.S.: Полагаю, что первый массив Вам тоже придется преобразовать.
@elektryk ты определись с форматом. Такой формат данных: или такой, как в файле test.txt который ты прикрепил?
я прикрепилА сервер выдаёт текстовый файл в формате 28072017 10000 где первая цифра (ДеньМесяцГод) и вторая (суммаВденьгах) спасибо за интерес к теме)