Имеется такого вида строка PHP: $string="2019.06.11\tparametr\tAnton\tbloks\t50 039\t5 200 м³\t362 604\r\n2019.06.05\tparametr\tAlexandr\tbloks\t33 606\t3 360 м³\t36 107"; на самом деле в наличии много строк=), но тут только 2 разделителя "\t" и "\r\n" мне необходима функция которая преобразит его в json вида JSON Viewer или Код (Text): {"total":"2","items":[{"date":"2019.06.11","name1":"parametr","name2":"Anton","material":"bloks","count":50039,"value":5200,"price":362604},{"date":"2019.06.05","name1":"parametr","name2":"Alexandr","material":"bloks","count":33606,"value":3360,"price":36107}]} Как это лучше сделать? Прошу помочь решить мою проблему p.s пхп я пытаюсь понять а регулярки для меня это кошмар
Сторонний сайт обрабатывает первоначальные данные и там есть возможность выгрузить такого вида строку Также он может выдать те-же данные без разделителей а просто пробелы или табуляции но в таком случае я так понимаю нельзя адекватно обработать цифры с пробелами
переделал, на выходе ваш массив. PHP: <?php $string = "2019.06.11\tparametr\tAnton\tmaterial1\t50 039\t5 200 м³\t362 604\r\n2019.06.05\tparametr\tAlexandr\tmaterial1\t33 606\t3 360 м³\t36 107"; $str = preg_replace("!([\b\t\n\r\f\"\\'])!", "\\\\\\1", $string); $temp = ['date', 'name1', 'name2', 'material', 'count', 'value' , 'price']; $array = explode("\\", $str); $count = count($temp); $i = 0; $s = 0; $result['total'] = 2; foreach($array as $key => $value){ $value = trim($value); if(mb_strlen($value) === 0){ $i = 0; $s++; }else{ $result['items'][$s][$temp[$i]] = $value; $i++; } } print_r($result); ?>
PHP: $string="2019.06.11\tparametr\tAnton\tbloks\t50 039\t5 200 м³\t362 604\r\n2019.06.05\tparametr\tAlexandr\tbloks\t33 606\t3 360 м³\t36 107"; $s = explode("\r\n", $string); $res = []; $res['total'] = count($s); $res['items'] = array_map(function($e){ return array_combine(['date', 'name1', 'name2', 'material', 'count', 'value' , 'price'], explode("\t", $e)); }, $s); echo json_encode($res);
почему то ваш вариант отказывается принимать get/post данные, выдает ошибку "Warning: array_combine(): Both parameters should have an equal number of elements in" и вывод PHP: echo json_encode($res); возвращает Код (Text): {"total":1,"items":[false]} но если передавать строкой то все работает хорошо судя из гугла проблема в кроется разности количества индексов массивов(или как-то так), подскажите почему при get/post возвращает false?