есть таблица примерно такого вида то есть полный беспорядок новая ячейка <td></td> может начинаться в той же строке может начинаться с новой строки HTML: <table> <tr><td>111</td> <td>222</td><td>333</td> <td>444</td> </tr><tr><td>111</td> <td>222</td><td>333</td><td>444</td> </tr></</table> каждую ячейку <td></td> в строке <tr></tr> надо записать в отдельное поле базы данных после того как строка заканчиваеться </tr> надо начинать новую запись в БД как можно ее экспортировать в MySq? может есть какие то специальные средства для экспорта html таблиц ??
на javascript нашел решение с помощью этой функции можно переместиться в нужный тег <td></td> и получить его содержимое var table=document.getElementsByTagName('table'); var val=table[1].document.getElementsByTagName('td')[1].innerHTML; я только незнаю как сосчитать количество строк <tr></tr> в таблице Есть что то похожее на php?
Например такие регулярные выражения: Код (Text): preg_match_all('/<td>([\d]+)<\/td>/i', $text, $match); print_r(match);
lexa PHP: <? preg_match_all('/<td>([\w\s\d]*)<\/td>/i', $text, $match, PREG_SET_ORDER); как сделать чтобы в массив $match строки разделялись<tr></tr> да и если в <td></td> есть символ + то вся запись пропускаеться как сделать чтобы любые символы не пропускались даже пустые ([\w\s\d]*) неподходит
PHP: <?php $data = <<<HTML <table> <tr><td>111</td> <td>222</td><td>333</td> <td>444</td> </tr><tr><td>111</td> <td>222</td><td>333</td><td>444</td> </tr> </table> HTML; foreach (explode("</tr><tr>", $data) as $tr) { preg_match_all("#<td>(.*)</td>#Usi", $tr, $td, PREG_SET_ORDER); print_r($td); }
Код (Text): $text = ' <table> <tr><td>111</td> <td>222</td><td>333</td> <td>444</td><td></td> </tr><tr><td>aaa</td> <td>bbb</td><td>ccc</td><td>vvv</td> </tr></table>'; foreach (explode('<tr>', $text) as $v) if (preg_match_all('/<td>(.*?)<\/td>/', $v, $match)) $array[] = $match[1]; print_r($array); На выходе даст: Массив $array[0] содержит td из первого tr, $array[1] - из второго. Ну, а дальше сделай цикл по этому ($array) массиву и забивай в базу. Если я правильно тебя понял.
Sergey89 у меня твой код по tr не разделяет массив lexa все ок работает спасибо вот код с исключением первой строки таблицы где просто загаловки PHP: foreach (explode('<tr>', $text) as $v) if (preg_match_all('/<td>(.*?)<\/td>/', $v, $match)) $array[] = $match[1]; <? foreach ($array as $key => $trr) if ($key==0){} else { {?><br /><? foreach ($trr as $array) { echo $array;?><br /><? } } } ?>
А, ну да. $array[0] это заголовки в таблицах, но они обычно пишутся как <th>, а не <td>. Поэтому пиши, как тебе удобнее и исходя из того, какой код предпологается пропарсить. В данном случае - $array[0] это заголовки. З.Ы. Имхо, тут удобнее использовать for, а не foreach: Код (Text): for ($i = 1, $c = count($array); $i < $c; $i++) // $i = 1, потому что 0 это заголовки foreach ($array[$i] as $td) echo $td.'<br />';
lexa да ладно уже, там большой скрипт написал занос в базу обработака ошибок лезть больше не хочу кто ж знал что count($array); можно посчитать элементы массива и использоват любимый цикл for