Что вы ожидаете увидеть в выводе? 115? А вот и нет. Если echo выведет 115, то var_dump выведет 114.99999
Что не так с float?
Тип float в языке PHP, как и его “родственник” тип double, вовсе не предназначен для точного представления десятичных дробей. Всё что мы записали в float, хранится в приближенном значении, с некоторой погрешностью.
Решение: в виду того что в PHP это считается фичей, а не багом, то для точной работы с математикой нужно использовать модуль bcmath. Ну или использовать округления до нужной точности
Задача: Есть некая очень захламленная сторонними элементами страница в разметке html. Необходимо преобразовать находящуюся на ней таблица в массив данных.
Решение: сначала вычленим «грязное» содержимое таблицы между тегами <tbody></tbody>, затем преобразуем его в DOM документ, а далее уже распарсим его обходами и разложим элементы в массив.
Получилось что-то вроде:
//вычленяю таблицу
$t1=explode("<tbody>",$res);
$t2=explode("</tbody>",$t1[1]);
$tbody="<html><head><meta charset='UTF-8'></head><body><table><tbody>".$t2[0]."</tbody></table></body></html>";
$mass=[];
$dom = new domDocument('1.0', 'utf-8');
@$dom->loadHTML($tbody);
$tables= $dom->getElementsByTagName('table');
foreach ($tables as $table) {
$trs= $table->getElementsByTagName('tr');
foreach ($trs as $tr) {
$tds=$tr->getElementsByTagName('td');
$info=[];
foreach ($tds as $td) {
$info[]=$td->textContent;
};
$mass[]=$info;
}
}
В одном из проектов, скрипт парсит сайт на bitrix. С какого то момента, при установке параметров таблицы отдаваемой по ajax, стала выводиться ошибка «Request is not XHR». Быстрый гуглинг решения не дал. Стал кропотливо сравнивать заголовки которые отдаются запросом в браузере и заголовки который отдавал в скрипте. Отличие нашлось относительно быстро, страница на сайте добавляла дополнительный заголовок «Bx-ajax:true». В результате модифицировал скрипт следующим образом:
Для начала прочитаем содержимое архива (чтение архива zip на php). Во встречающихся на просторах интернета примерах, зачастую игнорируется тот факт, что имена файлов могут быть в кириллице.В результате пользователи видят «крякозябры». А zip хранит имена файлов, указывая их не в кодировке UTF-8, а в кодировке cp866 (видимо из соображения совместимости). По крайне мере на Windows. Поэтому имена файлов перед употреблением, нужно переформатировать в UTF-8.
Довольно часто встречается задача автоматизировать заполнение всяческих заявлений..ну например в бухгалтерию. Это вполне можно сделать и на PHP, позволив пользователю на форме веб страницы заполнить основные данные, а затем отдав ему уже сформированный на основе шаблона файл формата docx (файл docx на основе шаблона).
На JavaScript создам функцию — обработчик нажатия на кнопку «Сформировать заявление». Функция делает запрос на сервер, а в ответ получает сформированный файл. Браузер автоматически предложит его сохранить.
function CreateZay(){
console.log("--создаётся заявление..");
var xhr = new XMLHttpRequest();
xhr.open('POST', '/sever/zayav.php', true);
xhr.responseType = 'blob';
xhr.onload = function(e) {
if (this.status == 200) {
var link=document.createElement('a');
link.href=window.URL.createObjectURL(this.response);
link.download="result.docx";
link.click();
}
else {
console.log(e);
}
};
var form_data = new FormData();
form_data.append("position_at_work", position_at_work.value);
form_data.append("me_unit", me_unit.value);
form_data.append("me_name", me_name.value);
form_data.append("date_start", date_start.value);
form_data.append("long_vacation", long_vacation.value);
xhr.send(form_data);
};
С клиентской частью (ну которая в браузере) разобрались. Теперь займемся сервером. Чтобы ничего не изобретать, воспользуемся пакетом phpoffice/phpword:
composer require phpoffice/phpword
Далее подготовим файл-шаблон. Можно в любом редакторе, который поддерживает расширение docx. В файле , те части которые мы хотим заменить, обрамляем ${имя_переменноя}, чтобы получилось например что-то вроде:
Далее, серверная часть, которая заполняет непосредственно сам шаблон: