ФорумПрограммированиеPHP для идиотов → Как можно оптимизировать код

Как можно оптимизировать код

  • andyarus

    Сообщения: 4 Репутация: N Группа: Кто попало

    Spritz 7 мая 2011 г. 12:31

    Написал парсер данных. Подскажите как можно было сделать проще? Стрелка должна быть в отдельной переменной.
    <?php

    $a = file_get_contents("http://nagranitse.ru/");

    preg_match('#(?>число машин|number of cars).*<td>(?>(\d+)<|(\d+)\s(.*)<).*(?>примерное время ожидания|estimated waiting time).*<td>(.*)</td>.*(?>последнее время обновления|last updated).*<td>(.*)</td>#isU', $a, $one);
    preg_match('#(?>число машин|number of cars).*<td>.*<td>(?>(\d+)<|(\d+)\s(.*)<).*(?>примерное время ожидания|estimated waiting time).*<td>.*<td>(.*)</td>.*(?>последнее время обновления|last updated).*<td>.*<td>(.*)</td>#isU', $a, $two);
    preg_match('#(?>число машин|number of cars).*<td>.*<td>.*<td>(?>(\d+)<|(\d+)\s(.*)<).*(?>примерное время ожидания|estimated waiting time).*<td>.*<td>.*<td>(.*)</td>.*(?>последнее время обновления|last updated).*<td>.*<td>.*<td>(.*)</td>#isU', $a, $three);

    echo "<html><head><style type='text/css'>";
    echo "table{width:600px; text-align:center; border-spacing:0;}";
    echo "th,td{padding:5px 0;}";
    echo "th{background:#D2DCE5;}";
    echo "th:first-child{border-radius:10px 0 0 0; -webkit-border-radius:10px 0 0 0; -moz-border-radius:10px 0 0 0;}";
    echo "th+th+th{border-radius:0 10px 0 0; -webkit-border-radius:0 10px 0 0; -moz-border-radius:0 10px 0 0;}";
    echo "td{border:1px solid #ccc;}";
    echo "tr+tr+tr+tr td:first-child{border-radius:0 0 0 10px; -webkit-border-radius:0 0 0 10px; -moz-border-radius:0 0 0 10px;}";
    echo "tr+tr+tr+tr td+td+td{border-radius:0 0 10px 0; -webkit-border-radius:0 0 10px 0; -moz-border-radius:0 0 10px 0;}";
    echo "</style></head><body>";



    if($one[1] !== "" & $two[1] !== "" & $three[1] !== "") {
    echo "<table>";
    echo "<tr><th>Торфяновка</th><th>Брусничное</th><th>Светогорск</th></tr>";
    echo "<tr><td>$one[1]</td><td>$two[1]</td><td>$three[1]</td></tr>";
    echo "<tr><td>$one[4]</tr><td>$two[4]</td><td>$three[4]</td></tr>";
    echo "<tr><td>$one[5]</td><td>$two[5]</td><td>$three[5]</td></tr>";
    echo "</table>";
    } elseif($one[1] !== "" & $two[1] !== "" & $three[1] == "") {
    echo "<table>";
    echo "<tr><th>Торфяновка</th><th>Брусничное</th><th>Светогорск</th></tr>";
    echo "<tr><td>$one[1]</td><td>$two[1]</td><td>$three[2] $three[3]</td></tr>";
    echo "<tr><td>$one[4]</td><td>$two[4]</td><td>$three[4]</td></tr>";
    echo "<tr><td>$one[5]</td><td>$two[5]</td><td>$three[5]</td></tr>";
    echo "</table>";
    } elseif($one[1] !== "" & $two[1] == "" & $three[1] !== "") {
    echo "<table>";
    echo "<tr><th>Торфяновка</th><th>Брусничное</th><th>Светогорск</th></tr>";
    echo "<tr><td>$one[1]</td><td>$two[2] $two[3]</td><td>$three[1]</td></tr>";
    echo "<tr><td>$one[4]</td><td>$two[4]</td><td>$three[4]</td></tr>";
    echo "<tr><td>$one[5]</td><td>$two[5]</td><td>$three[5]</td></tr>";
    echo "</table>";
    } elseif($one[1] !== "" & $two[1] == "" & $three[1] == "") {
    echo "<table>";
    echo "<tr><th>Торфяновка</th><th>Брусничное</th><th>Светогорск</th></tr>";
    echo "<tr><td>$one[1]</td><td>$two[2] $two[3]</td><td>$three[2] $three[3]</td></tr>";
    echo "<tr><td>$one[4]</td><td>$two[4]</td><td>$three[4]</td></tr>";
    echo "<tr><td>$one[5]</td><td>$two[5]</td><td>$three[5]</td></tr>";
    echo "</table>";
    } elseif($one[1] == "" & $two[1] !== "" & $three[1] !== "") {
    echo "<table>";
    echo "<tr><th>Торфяновка</th><th>Брусничное</th><th>Светогорск</th></tr>";
    echo "<tr><td>$one[2] $one[3]</td><td>$two[1]</td><td>$three[1]</td></tr>";
    echo "<tr><td>$one[4]</td><td>$two[4]</td><td>$three[4]</td></tr>";
    echo "<tr><td>$one[5]</td><td>$two[5]</td><td>$three[5]</td></tr>";
    echo "</table>";
    } elseif($one[1] == "" & $two[1] !== "" & $three[1] == "") {
    echo "<table>";
    echo "<tr><th>Торфяновка</th><th>Брусничное</th><th>Светогорск</th></tr>";
    echo "<tr><td>$one[2] $one[3]</td><td>$two[1]</td><td>$three[2] $three[3]</td></tr>";
    echo "<tr></div><td>$one[4]</td><td>$two[4]</td><td>$three[4]</td></tr>";
    echo "<tr></div><td>$one[5]</td><td>$two[5]</td><td>$three[5]</td></tr>";
    echo "</table>";
    } elseif($one[1] == "" & $two[1] == "" & $three[1] !== "") {
    echo "<table>";
    echo "<tr><th>Торфяновка</th><th>Брусничное</th><th>Светогорск</th></tr>";
    echo "<tr><td>$one[2] $one[3]</td><td>$two[2] $two[3]</td><td>$three[1]</td></tr>";
    echo "<tr><td>$one[4]</td><td>$two[4]</td><td>$three[4]</td></tr>";
    echo "<tr><td>$one[5]</td><td>$two[5]</td><td>$three[5]</td></tr>";
    echo "</table>";
    } elseif($one[1] == "" & $two[1] == "" & $three[1] == "") {
    echo "<table>";
    echo "<tr><th>Торфяновка</th><th>Брусничное</th><th>Светогорск</th></tr>";
    echo "<tr><td>$one[2] $one[3]</td><td>$two[2] $two[3]</td><td>$three[2] $three[3]</td></tr>";
    echo "<tr><td>$one[4]</td><td>$two[4]</td><td>$three[4]</td></tr>";
    echo "<tr><td>$one[5]</td><td>$two[5]</td><td>$three[5]</td></tr>";
    echo "</table>";
    }

    echo "</body></html>";

    ?>
  • ivanscm

    Сообщения: 1251 Репутация: N Группа: Джедаи

    Spritz 7 мая 2011 г. 13:52, спустя 1 час 21 минуту 49 секунд

    нихуя не понял :)
    С возвращением, Пiха! hyperoff.ru - качественный хостинг php
  • andyarus

    Сообщения: 4 Репутация: N Группа: Кто попало

    Spritz 7 мая 2011 г. 14:44, спустя 51 минуту 39 секунд

    Вроде все просто.
    Почитайте http://www.pcre.ru/
  • truth4oll

    Сообщения: 463 Репутация: N Группа: Адекваты

    Spritz 7 мая 2011 г. 14:53, спустя 8 минут 51 секунду

    ivanscm, понял, учи регулярки!) чтоб всё понимать!
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 7 мая 2011 г. 15:21, спустя 28 минут 4 секунды

    что ты хочешь получить в итоге?
    вообще парсинг делается с помощью tidy + simplexml
    не всё полезно, что в swap полезло
  • andyarus

    Сообщения: 4 Репутация: N Группа: Кто попало

    Spritz 7 мая 2011 г. 19:08, спустя 3 часа 47 минут 30 секунд

    (?>(\d+)<|(\d+)\s(.*)<)
    Если 1 вариант, то $a[1] !== ""
    Если 2 вариант, то $a[1] == ""
    Что непонятно?

    Мне нужно спарсить информацию, если запустить скрипт, все видно будет.
    Как с помощью tidy + simplexml спарсить <td>40 &uarr;</td>
    число и &uarr; в разные переменные

Пожалуйста, авторизуйтесь, чтобы написать комментарий!