[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: из js в php
host
кто нибудь может написать код php аналогичный этому на javascript:
document.getElementsByTagName("table").length
?



Спустя 9 минут, 4 секунды (21.05.2011 - 20:03) Gradus написал(а):
host, а вы сможете описать проблему или цель применения php ?
потому что вопрос мягко говоря безрассудный

Спустя 5 минут, 2 секунды (21.05.2011 - 20:08) alex12060 написал(а):
О_О

Жесть то какая)
Если я не ошибаюсь, то пхп плохо работает с DOM

а так, посомтри в сторону: sizeof() или strlen()

Спустя (21.05.2011 - 20:08) host написал(а):
почему безрассурдный?
определить количество таблиц на странице

Спустя 1 минута, 10 секунд (21.05.2011 - 20:09) host написал(а):
я в php плохо разбираюсь
недано js более менее разобрал

Спустя 7 минут (21.05.2011 - 20:16) alex12060 написал(а):
Цитата
определить количество таблиц на странице


Можно конечно, но это реально дикий изврат получится, и я верен, что ты ничего не поймешь. Ради интереса, сейчас попробую реализовать...

Спустя 2 минуты, 38 секунд (21.05.2011 - 20:19) host написал(а):
на js это нормально, а на php изврат
странновато...

Спустя 12 минут, 46 секунд (21.05.2011 - 20:32) alex12060 написал(а):
PHP - серверный язык, JavaScript - клиентский язык.

Если ты не понимаешь что значит клиент, что сервер, то предлагаю поучить эти понятия. PHP работает с сервером в чистом виде, а ЖС - с DOM элементами, т.е со страницами и элементами.

Вот теперь посмотри, я тебе написал скрипт, который покажет кол-во таблиц на странице. Во первых, нужно страницу скачать и пройтись по ней регулярным выражением и уже считать массивы. Это ужас.

Ты почитай про PHP и через пару месяцев открой эту тему и посмейся над своими утверждениями и поставь мне люсик :)


<?php
error_reporting(E_ALL);


$text = file_get_contents('http://citforum.ru/internet/html40/struct/tables.html');

//echo $text;

preg_match_all("#<table[^>]+>#i", $text, $res);
$i = 0;

foreach($res as $val) {
if (is_array($val)) $i += sizeof($val);
else
++$i;
}

echo $i;


die();

Спустя 2 минуты, 17 секунд (21.05.2011 - 20:34) Gradus написал(а):
alex12060, вот ты зря так скрипт выдал smile.gif может он на своей странице хочет посчитать, тогда это вообще ужас собственную страницу парсить да ещё и в рекурсию впадёт wink.gif надо сначало узнать что нужно от php, что хочет реализовать.

Спустя 1 минута, 51 секунда (21.05.2011 - 20:36) host написал(а):
спс

Спустя 5 секунд (21.05.2011 - 20:36) alex12060 написал(а):
Gradus

определить количество таблиц на странице

Вполне адекватно изложил проблему smile.gif

Спустя 1 минута, 35 секунд (21.05.2011 - 20:38) alex12060 написал(а):
P.S

Подправил капку свой код.

Спустя 1 минута, 4 секунды (21.05.2011 - 20:39) Gradus написал(а):
Цитата
определить количество таблиц на странице

на чьей ? тут не указано что на чужой, я подразумеваю сейчас кто-то себя ддосить начнёт biggrin.gif

Спустя 4 минуты, 26 секунд (21.05.2011 - 20:43) Greg1978 написал(а):
Формирует страницу не JS а PHP, если это конечно не RC, в самом PHP и можно посчитать например количество элементов в массиве $table и при рендеринге можно указать сие число smile.gif , просто это будет на уровне формирования html кода на сервере а не рендеринге в браузере. Кстати в PHP есть работа с DOM.

Спустя 1 минута, 29 секунд (21.05.2011 - 20:45) alex12060 написал(а):
Ну блин, по мне, должно быть четкое разделение труда - ЖС -> DOM, PHP -> обработка своего кода. ИМХО

Спустя 5 минут, 19 секунд (21.05.2011 - 20:50) Greg1978 написал(а):
Цитата (alex12060 @ 21.05.2011 - 17:45)
Ну блин, по мне, должно быть четкое разделение труда - ЖС -> DOM, PHP -> обработка своего кода. ИМХО

Я то же такого мнения придерживаюсь.
Котлеты отдельно, мухи в другую сторону.

Спустя 9 часов, 53 минуты, 50 секунд (22.05.2011 - 06:44) Invis1ble написал(а):
Конечно же, имхо, лучше считать кол-во таблиц на уровне формирования оных, как уже заметил Greg1978.
Но можно и пропарсить, если нет доступа к скрипту, формирующему вывод. Самый быстрый способ - регуляркой.
Самый "удобный" и "универсальный" (в данном случае, думаю, он совсем не к месту) и, соответственно, неповоротливый - с помощью объекта DOMDocument(), примерно так:
function iterate($node, &$amount)
{
$tables = $node->getElementsByTagName('table');
$amount += count($tables);

foreach ($tables as $table)
if ($table->hasChildNodes())
iterate($table, $amount);
}

$DOM = new DOMDocument();

if ($DOM->loadHTMLFile($url))
{
$amount = 0;
iterate($DOM, $amount);
echo $amount;
}
else
{
// невалидный документ
}

Причем сработает этот способ только если документ валиден ;)
Если взглянуть на объем кода и примерно прикинуть размер потребляемых ресурсов и скорость выполнения думаю становится очевиден тот факт, что регулярки рулят :D
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.