За последние 24 часа нас посетили 17483 программиста и 1719 роботов. Сейчас ищут 1738 программистов ...

Денежный отчёт(график!?)

Тема в разделе "Сделайте за меня", создана пользователем elektryk, 24 июл 2017.

  1. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    Привет!
    Сделала форму денежных поступлений и расходов.
    Итог считается, данные добавляются, но очень хочется график по дням.
    Одна линия приход, вторая расход.
    файлы - index.txt (php) - основная форма
    - reg.txt (php) - обработчик post запросов с задержной в 1 сек(иначе incron не успевает)
    - graf.txt(php) - взятый извне график, в который и хочется передавать точки(дату+сумму задень)
    Помогите с массивом для графика.
    формат данных для линий приход (расход):
    20170724 1000
    (годмесяцдень) (сумма приходазадень)
     

    Вложения:

    • index.txt
      Размер файла:
      1,5 КБ
      Просмотров:
      1
    • reg.txt
      Размер файла:
      376 байт
      Просмотров:
      0
    • graf.txt
      Размер файла:
      4,2 КБ
      Просмотров:
      4
  2. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
  3. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Можно решить моим классом
    https://php.ru/forum/threads/generator-diagramm-grafikov-gotovoe-reshenie.33280/
    PHP:
    1. <?php
    2. $diagram = new vsDiagram(1280, 720, 255, 255, 255); // холст 1280x720, белый фон
    3. $diagram->xRange(30); // 30 - число делений по X
    4. $diagram->yRange(ceil($max / 1000)); // $max - максимальный дневной доход или расход (какая цифра больше - та и берется)
    5. // число делений по Y будет кратно тысячам руб.
    6. $diagram->addPoly('red', 255, 0, 0) ->addPoly('black', 0, 0, 0); // красная и черная линия
    7.  
    8. // в массивах $debet и $credit по 30 элементов
    9. // в качестве значений - сумма в рублях
    10. $day = 0;
    11. foreach ($debet as $value) {
    12.   $diagram->addVertex('black', $day, $value);
    13.   $day++;
    14. }
    15.  
    16. $day = 0;
    17. foreach ($credit as $value) {
    18.   $diagram->addVertex('red', $day, $value);
    19.   $day++;
    20. }
    21.  
    22. header('Content-Type: image/png');
    23. echo $diagram;
     
  4. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    Спасибо за ответ)
    сама проблема с вытягиванием данных в массив:
    формат данных для линий приход (расход):
    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;

     
  5. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    спят наверное все ещё)
     
  6. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    можно начать сначала:
    текстовый файл с таким содержимым:
    cat "test.txt"
    100 90
    10 70
    30 23
    100 26
    обработчик файла:
    test.php
    PHP:
    1. <?php
    2.   $array = file("test.txt");
    3.   foreach ( $array as list($a, $b)) {
    4.   echo "A: $a     B: $b", "<br>";}
    5. ?>
    вывод на экран:
    A: B:
    A: B:
    A: B:
    A: B:


    хм, как исправить?
     
  7. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    --- Добавлено ---
    Чтобы разделить строку на два элемента по пробелу, существует функция explode()
    Код (Text):
    1. $array = explode(' ', $string);
    --- Добавлено ---
    потом, если хочется, можно использовать list()
     
  8. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    спасибо Аlexblack.
    как теперь это применить к моему графику, ведь это массив, с переменными и ключами.
    для X и Y нужны ещё ключи ($key)
    в формате $x($key) и $y(key$)
    ??
     
  9. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    Уважаемый Admin форума, перенеси мою тему в раздел: Сделайте за меня.
    боюсь в этом разделе мало получится для решения моей проблемы :((

    --- Добавлено ---
    в моём понимании, если словами:
    читаем построчно файл X0Y0.txt
    при чтении разбиваем данные из каждой строки разделителем "пробел" и запоминаем номер строки
    всё это запоминаем в массив, где значения присваиваются следующим методом:
    $x0($(№строки))=ПервоеЗначениеИзСтрокиСтолбец1 $y0($(тот же №строки))=ПервоеЗначениеИзСтрокиСтолбец2
    $x0($(№строки))=ВтороеЗначениеИзСтрокиСтолбец1 $y0($(тот же №строки))=ВтороеЗначениеИзСтрокиСтолбец2
    ........
    так?
    как это в виде кода увидеть?
    --- Добавлено ---
    Админу благодарность за оперативность))
     
  10. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    всё, тишина, неужели никто не поможет :( из текстового файла вытянуть переменные :(
    --- Добавлено ---
    вот на баше однострочник:

    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 это сделать?
     
  11. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @elektryk есть пример текстового файла? Можешь прикрепить к сообщению
     
  12. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    да
     

    Вложения:

    • test.txt
      Размер файла:
      92 байт
      Просмотров:
      3
  13. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    или со срезом по дням:
    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;
     
  14. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    @denis01 может формировать php файл средствами bash-а ?
     
  15. Познающий php

    Познающий php Новичок

    С нами с:
    23 мар 2017
    Сообщения:
    381
    Симпатии:
    74
    Ниче не ясно, сумбур какой-то. Что надо вообще, то ли точки не можешь достать, то ли график подписать днями вместо нулей. Не пойму )))

    Берете какую-нибудь простую библиотеку pchart или что свежее я хз. Берете свои данные обрабатываете, чтобы получить точки за каждый день и рисуете. Вот пример: https://habrahabr.ru/post/205532/
    20 строчек кода и имеете то что хотите
     
  16. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    задача:
    из текстового файла(прикреплён выше) создать массив, где первая колонка это x0, вторая y0, при этом каждая строка текстового файла должна быть ключом к этим значениям. пример переменных и значений в массиве:
    x0(0)=5 y0(0)=1
    x0(1)=3 y0(1)=8
    и так далее, то есть то что в скобках - это значение строки по очереди.
    график может принять только этот массив(пример кода графика прикреплён выше, название graf.txt)
    буду рада, если можно как то ещё сделать :)
     
  17. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @elektryk, Вы сами уже все написали и Вам уже подсказали где исправить:
    Получится:
    PHP:
    1. <?php
    2.   $array = file("test.txt");
    3.   $x = [];
    4.   $y = [];
    5.   foreach ( $array as $stroka) {
    6.       $parts = explode(' ', $stroka);
    7.       $x[] = $parts[0];
    8.       $y[] = $parts[1];
    9.   }
    В результате получатся два массива:
    Код (Text):
    1. array(6) {
    2.   [0]=>  string(8) "23072017"
    3.   [1]=>  string(8) "24072017"
    4.   [2]=>  string(8) "27072017"
    5.   [3]=>  string(8) "19072017"
    6.   [4]=>  string(8) "24072017"
    7.   [5]=>  string(8) "27072017"
    8. }
    9. array(6) {
    10.   [0]=>  string(7) "10000"
    11.   [1]=>  string(7) "10000"
    12.   [2]=>  string(6) "1000"
    13.   [3]=>  string(7) "10000"
    14.   [4]=>  string(7) "11000"
    15.   [5]=>  string(4) "1500"
    16. }
    P.S.: Полагаю, что первый массив Вам тоже придется преобразовать.
     
    #17 Maputo, 27 июл 2017
    Последнее редактирование: 27 июл 2017
  18. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    Урааа!!!!, хоть и кривой но работает!!! спасибо всем :*
    Безумный.png
     
  19. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    допиливать будем?))
     
    denis01 нравится это.
  20. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    масштабируемость графика и некорректные подписи можно как-то убрать?
     
  21. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @elektryk ты определись с форматом. Такой формат данных:

    или такой, как в файле test.txt который ты прикрепил?
     
  22. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    я прикрепилА
    сервер выдаёт текстовый файл в формате
    28072017 10000
    где первая цифра (ДеньМесяцГод) и вторая (суммаВденьгах)
    спасибо за интерес к теме)
     
  23. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    а это тогда что такое?
     
  24. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    это для примера просто, чтобы понять как распределяются колонки и переменные и ключи к строкам)
     
  25. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    @elektryk а тебе же надо две линии начертить?