Ответы пользователя по тегу PHP
  • Почему ini_set в проекте устанавливается при определенном событии? Правильно ли это?

    lidacriss
    @lidacriss
    wtf
    И меняют на все время, а не на время конкретной операции?

    Меняют как раз таки на время, а не на "всегда"
    ini_set
    Устанавливает значение заданной настройки конфигурации. Настройка будет хранить установленное значение пока выполняется скрипт. После завершения работы скрипта значение настройки вернется к исходному.

    Это нужно, в том случае, когда нам надо загрузить что-то, что грузится долго и чтобы не отпал скрипт по таймауту
    Ответ написан
    Комментировать
  • Как декодировать json в php?

    lidacriss
    @lidacriss
    wtf
    json_decode
    По полученным декодированным объектам ходить таким образом:
    $json_decode->date-add-wl->field->data-> и тд
    Ответ написан
    Комментировать
  • Что не так с регулярным выражением для поиска тега h1?

    lidacriss
    @lidacriss
    wtf
    preg_match($text, $pattern, $matches);
    в preg_match
    сначала идет паттерн, потом текст, потом матч

    preg_match
    int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

    Ответ написан
    Комментировать
  • Как вывести 10 фактов?

    lidacriss
    @lidacriss
    wtf
    Вариант 1:
    $errorCount = 0; //будем считать ошибки, чтобы не ходить все время по кругу
    $textFacts = []; // массив с фактами
    $urlFact = 'http://randstuff.ru/fact'; // урл на факты
    // пока массив с фактами меньше 10 и количество ошибок меньше 5, то ходим снова по циклу
    while (count($textFacts) < 10 && $errorCount < 5) {
        $pageFact = file_get_contents($urlFact); // достаем контент с удаленной страницы
        // если удалось найти искомое, записываем в массив
        if (preg_match('#<div id="fact">.*?<td>(?P<fact>.*?)</td>#', $pageFact, $match)) {
            $textFact = "Интересный факт:\n\n" . $match['fact'] . "\n";
            array_push($textFacts, $textFact);
        }  else $errorCount++; // если не удалось найти нужное, то плюсуем ошибки
    }
    echo implode("\n", $textFacts); // склеиваем значения в массиве в строку и выводим


    Вариант 2:
    $errorCount = 0;
    $textFacts = [];
    $urlFactAjax = 'https://randstuff.ru/fact/generate/';
    $options = [
        CURLOPT_RETURNTRANSFER => 1,  // return web page
        CURLOPT_HEADER         => 0,  // return headers
        CURLOPT_SSL_VERIFYPEER => 0,  // Disabled SSL Cert checks
        CURLOPT_SSL_VERIFYHOST => 0,
        CURLOPT_POST           => 1,
        CURLOPT_HTTPHEADER     => ['X-Requested-With:XMLHttpRequest'],
    ];
    while (count($textFacts) < 10 && $errorCount < 5) {
        // $json_string = file_get_contents($urlFact, false, $context);
        $ch = curl_init($urlFactAjax);
        curl_setopt_array($ch, $options);
        $fact = '';
        if ($json_string = curl_exec($ch))
            if ($json_content = json_decode($json_string))
                $fact = trim($json_content->fact->text ?? '');
        if (strlen($fact)) {
            array_push($textFacts, "Интересный факт:\n\n{$fact}\n");
        } else $errorCount++;
    }
    echo implode("\n", $textFacts);
    Ответ написан
  • Что не так с регуляркой?

    lidacriss
    @lidacriss
    wtf
    не получится у вас
    Array ( [0] => hypertext [1] => ) language), programming )

    т.к. вы начало съедаете
    вы должны понимать, что делает preg_split
    она разбивает строку по регулярному выражению.
    если у нас регулярка ^[^)]+"выкусывает" эту часть:
    hypertext) language), programming

    то и получится у вас результат:
    Array ( [0] => [1] => ) language), programming )
    Ответ написан
  • Как правильно зафиксировать последнее значение (в конце дня) в БД?

    lidacriss
    @lidacriss
    wtf
    может проще всегда писать во вторую специальную таблицу, но перезаписывать значение сегодняшнее

    INSERT INTO table_name (`column1`, `column2`, `column3`, `date`)
    VALUES ('value1', 'value2', 'value3', CURDATE())
    ON DUPLICATE KEY UPDATE 
    `column1`=VALUES(`column1`), 
    `column2`=VALUES(`column2`), 
    `column3`=VALUES(`column3`);


    В таком таблице колонка с датой должны быть уникальна
    Таким запросом должно писаться только 1 значение по каждому дню
    только оно будет постоянно перезаписываться и актуальным будет только последнее значение за каждый день
    Ответ написан
    Комментировать
  • Как отфилтровать массив в php удалить дубликаты и объеденить значение уникальных ключей в одну строку?

    lidacriss
    @lidacriss
    wtf
    Если нужно смотреть только на 'DAY_NUMBER', то примерно так:
    Наш массив
    $arr = [
        [
            'ID' => '105653877',
            'CABLAB_NAME' => 'Участок',
            'DEPARTMENT_NAME' => 'Отдел',
            'DEPARTMENT_KIND' => '6405222',
            'EMPLOYER_ID' => '78621962',
            'EMPLOYER_NAME' => 'Иванов И. И.',
            'SERVICE_ID' => '',
            'SERVICE_NAME' => '',
            'DEVICE_NAME' => '',
            'DAY_NUMBER' => '1',
            'HOURS_BEGIN' => '08',
            'MINS_BEGIN' => '00',
            'HOURS_END' => '14',
            'MINS_END' => '00',
            'TIME_BEGIN_S' => '08:00',
            'TIME_END_S' => '14:00',
            'TIME_TYPE' => '6338504',
            'TIME_TYPE_CODE' => '1',
            'RCOUNT' => '1',
            'RCOUNTMAX' => '',
            'TIME_OR_COUNT' => '0',
            'RTIME_PRIM' => '15',
            'SORT_F' => '2',
            'ONLY_VIEW' => '0',
        ],
        [
            'ID' => '105653877',
            'CABLAB_NAME' => 'Участок',
            'DEPARTMENT_NAME' => 'Отдел',
            'DEPARTMENT_KIND' => '6405222',
            'EMPLOYER_ID' => '78621962',
            'EMPLOYER_NAME' => 'Иванов И. И.',
            'SERVICE_ID' => '',
            'SERVICE_NAME' => '',
            'DEVICE_NAME' => '',
            'DAY_NUMBER' => '3',
            'HOURS_BEGIN' => '08',
            'MINS_BEGIN' => '00',
            'HOURS_END' => '14',
            'MINS_END' => '00',
            'TIME_BEGIN_S' => '08:00',
            'TIME_END_S' => '14:00',
            'TIME_TYPE' => '6338504',
            'TIME_TYPE_CODE' => '1',
            'RCOUNT' => '1',
            'RCOUNTMAX' => '',
            'TIME_OR_COUNT' => '0',
            'RTIME_PRIM' => '15',
            'SORT_F' => '2',
            'ONLY_VIEW' => '0',
        ],
        [
            'ID' => '105653877',
            'CABLAB_NAME' => 'Участок',
            'DEPARTMENT_NAME' => 'Отдел',
            'DEPARTMENT_KIND' => '6405222',
            'EMPLOYER_ID' => '78621962',
            'EMPLOYER_NAME' => 'Иванов И. И.',
            'SERVICE_ID' => '',
            'SERVICE_NAME' => '',
            'DEVICE_NAME' => '',
            'DAY_NUMBER' => '5',
            'HOURS_BEGIN' => '08',
            'MINS_BEGIN' => '00',
            'HOURS_END' => '14',
            'MINS_END' => '00',
            'TIME_BEGIN_S' => '08:00',
            'TIME_END_S' => '14:00',
            'TIME_TYPE' => '6338504',
            'TIME_TYPE_CODE' => '1',
            'RCOUNT' => '1',
            'RCOUNTMAX' => '',
            'TIME_OR_COUNT' => '0',
            'RTIME_PRIM' => '15',
            'SORT_F' => '2',
            'ONLY_VIEW' => '0',
        ]
    ];
    $new_arr = [];
    foreach ($arr as $index => $item) {
        $id = $item['ID'];
        $new_arr[$id] = $new_arr[$id] ?? $item;
        $day = $item['DAY_NUMBER'];
        $days = explode(', ', $new_arr[$id]['DAY_NUMBER']);
        if (!in_array($day, $days))
            $days[] = $day;
        sort($days);
        $new_arr[$id]['DAY_NUMBER'] = implode(', ', $days);
    }
    Ответ написан
    Комментировать
  • Как работают уведомления toster'a?

    lidacriss
    @lidacriss
    wtf
    примерно вот так
    $(document).on("click", ".event__checkbox", function () {
            (function (cb) {
                cb.prop("checked") ? cb.closest("@event_item").addClass("events-list__item_checked") : cb.closest("@event_item").removeClass("events-list__item_checked");
                cb.prop("checked") ? cb.closest("@event_checker").attr({title: "Пометить как прочитанное"}) : cb.closest("@event_checker").attr({title: "Пометить как непрочитанное"});
                $.post("tracker/feed_mark_seen_event", {
                    event_id: cb.data("event_id"),
                    state: cb.prop("checked") ? 1 : 0
                }, "json").fail(fail_func)
            })($(this))
        });
    Ответ написан
    1 комментарий
  • Как в моём случае должна выглядеть регулярка?

    lidacriss
    @lidacriss
    wtf
    preg_replace('/^([\s\d]+).*/is', '$1', $str);
    потом можно еще удалить пробелы
    preg_replace('/\s+/', '', $str);
    Ответ написан
    Комментировать
  • Почему интерпретатор ругается на ?> в php?

    lidacriss
    @lidacriss
    wtf
    в конце FORM_HTML; уберите табуляцию :)
    Ответ написан
    4 комментария