Моя ошибка в парсинге

delvin-fil

Новичок
Доброго всем!
Имеется код:
PHP:
$patterns = array();
    $patterns[0] = '/n/';
    $patterns[1] = '/nw/';
    $patterns[2] = '/ne/';
    $patterns[3] = '/e/';
    $patterns[4] = '/se/';
    $patterns[5] = '/s/';
    $patterns[6] = '/sw/';
    $patterns[7] = '/w/';
    $replacements = array();
    $replacements[0] = 'Северный';
    $replacements[1] = 'Северо-восточный';
    $replacements[2] = 'Северо-западный';
    $replacements[3] = 'Восточный';
    $replacements[4] = 'Юго-восточный';
    $replacements[5] = 'Южный';
    $replacements[6] = 'Юго-западный';
    $replacements[7] = 'Западный';
А выдает:

Ветер ЮжныйВосточный 3.3 м./с.
Что я делаю не так?
Спасибо.
 

Breeze

goshogun
Команда форума
Партнер клуба
xml тут никаким боком, перенес
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Проверяй сначала все двухбуквенные паттерны, и лишь потом — однобуквенные.
 

AnrDaemon

Продвинутый новичок
@флоппик, не поможет. Посмотри что у него творится с текущим примером.
@delvin-fil, прочесть хорошую документацию по регулярным выражениям.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
@AnrDaemon строго говоря, мы вообще не знаем, что у него там на самом деле, может у него там str_replace
 

AnrDaemon

Продвинутый новичок
Ну, строго говоря, да.
Так что, ТС, показывайте код.
 

delvin-fil

Новичок
Ну, строго говоря, да.
Так что, ТС, показывайте код.
Собственно вот:
PHP:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/>
<title>
<?php
print "Погода еба!";
?>
</title>
</head>
<body bgcolor=#c0c0c0 >
<?php
    $city_id=29744; // id города
    $data_file="http://export.yandex.ru/weather-ng/forecasts/29744.xml"; // адрес xml файла

              $xml = simplexml_load_file($data_file); // раскладываем xml на массив

    // выбираем требуемые параметры (город, температура, пиктограмма и тип погоды текстом (облачно, ясно)

    //$city=$xml->fact->station;
    $time=$xml->fact->observation_time;
    $city=$xml->forecast->city;
    $wind=$xml->fact->wind_direction;
    $temp=$xml->fact->temperature;
    $pic=$xml->fact->image;
    $type=$xml->fact->weather_type;
    $speed=$xml->fact->wind_speed;
    $pressure=$xml->fact->pressure;
    $humidity=$xml->fact->humidity;
//    $tomorrow=$xml->informer->temperature[1];
    $tom_f=$xml->day[1]->day_part[1]->temperature_from;
    $tom_t=$xml->day[1]->day_part[1]->temperature_to;
    $wat_t=$xml->day[1]->day_part[1]->weather_type;
    $pic_t=$xml->day[1]->day_part[1]->image;

    // Если значение температуры положительно, для наглядности добавляем "+"
    //$tomorrow = array("tomorrow");
    if ($temp>0) {$temp='+'.$temp;}
//    if ($tomorrow>0) {$tomorrow='+'.$tomorrow;}
    if ($tom_t>0) {$tom_t='+'.$tom_t;}
    if ($tom_f>0) {$tom_f='+'.$tom_f;}
    $patterns = array();
    $patterns[0] = '/n/';
    $patterns[1] = '/nw/';
    $patterns[2] = '/ne/';
    $patterns[3] = '/e/';
    $patterns[4] = '/se/';
    $patterns[5] = '/s/';
    $patterns[6] = '/sw/';
    $patterns[7] = '/w/';
    $replacements = array();
    $replacements[0] = 'Северный';
    $replacements[1] = 'Северо-восточный';
    $replacements[2] = 'Северо-западный';
    $replacements[3] = 'Восточный';
    $replacements[4] = 'Юго-восточный';
    $replacements[5] = 'Южный';
    $replacements[6] = 'Юго-западный';
    $replacements[7] = 'Западный';
    $rest =  substr($time, -8);
    $rest2 = substr($time, -11, -9);
    $rest1 = substr($time, -14, -12);
    $rest3 = substr($time, 0, 4);
?>

<div id="weather" align="center">
<?php
echo ("<align center><font size=10 face=Arial>Ленинск-Кузнецкий</font></align><br>");
//echo("<br>");
echo ("<font color=#0000FF size=6>На $rest $rest2-$rest1-$rest3</font><br>");
//echo $time {6};
echo ("<img src=\"http://img.yandex.net/i/wiz$pic.png\" alt=\"$type\"  width=\"100\"><h1>$temp<sup>o</sup>C, $type</h1>");
echo("<h1>Ветер ");
//echo($wind);
echo preg_replace($patterns, $replacements, $wind);
echo(" $speed м./с.</h1>");
echo("<font size=5>Давление $pressure мм.р.с, влажность $humidity %</font><br><br>");
echo("<font color=#AA0000 size=5>Завтра $tom_f  $tom_t<sup>o</sup>C, $wat_t</font><br>");
echo ("<img src=\"http://img.yandex.net/i/wiz$pic_t.png\" alt=\"$wat_t\"  width=\"100\">");


?>
</div>
</body>
</html>
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Да ладно, тут один массив и strtr нужен, тут даже регулярки не нужны.
 

AnrDaemon

Продвинутый новичок
Ну и как strtr будем превращать "s" в южный а "sw" в юго-западный?
 

Andkorol

Новичок
Ну и как strtr будем превращать "s" в южный а "sw" в юго-западный?
Да вроде без проблем:
PHP:
php -a
Interactive shell

php > $replacements = array('n' => 'Северный', 'e' => 'Восточный', 's' => 'Южный', 'w' => 'Западный', 'nw' => 'Северо-западный', 'ne' => 'Северо-восточный', 'sw' => 'Юго-западный', 'se' => 'Юго-восточный');
php > $winds = array('se', 'ne', 's', 'nw', 'sw', 'e', 'n', 'w');
php > foreach ($winds as $wind) { echo $wind . ' – ' . strtr($wind, $replacements) . "\n"; }
se – Юго-восточный
ne – Северо-восточный
s – Южный
nw – Северо-западный
sw – Юго-западный
e – Восточный
n – Северный
w – Западный
php >
Пример #2 Пример использования strtr() с двумя аргументами:
Следующий пример демонстрирует поведение функции strtr() при вызове только с двумя аргументами. Обратите внимание на приоритет замен ("h" не используется, так как существуют более длинные совпадения) и как замененный текст больше не участвует в поиске.
 

delvin-fil

Новичок
Теперь осталось длинные определения вынести в отельный файл "и будет мне счастье!".:D
 

delvin-fil

Новичок
Вот думаю, что вынести в отельный inc файл...
PHP:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/>
<title>Погода еба!</title>
<style type="text/css">
  TABLE {
    width: 900px; /* Ширина таблицы */
    border-collapse: collapse; /* Убираем двойные линии между ячейками */
    text-align: center;
  }
</style>
</head>
<body bgcolor=#c0c0c0 >
<?php
    $city_id=29744; // id города
    $data_file="http://export.yandex.ru/weather-ng/forecasts/29744.xml"; // адрес xml файла
              $xml = simplexml_load_file($data_file); // раскладываем xml на массив
    // выбираем требуемые параметры (город, температура, пиктограмма и тип погоды текстом (облачно, ясно)

    //$city=$xml->fact->station;
    $time=$xml->fact->observation_time;
    $time_t=$xml->day[1];
    $city=$xml->forecast->city;
    $wind=$xml->fact->wind_direction;
    $temp=$xml->fact->temperature;
    $pic=$xml->fact->image;
    $type=$xml->fact->weather_type;
    $speed=$xml->fact->wind_speed;
    $pressure=$xml->fact->pressure;
    $humidity=$xml->fact->humidity;
    $tom_f_0=$xml->day[1]->day_part[0]->temperature_from;
    $tom_t_0=$xml->day[1]->day_part[0]->temperature_to;
    $tom_f_1=$xml->day[1]->day_part[1]->temperature_from;
    $tom_t_1=$xml->day[1]->day_part[1]->temperature_to;
    $tom_f_2=$xml->day[1]->day_part[2]->temperature_from;
    $tom_t_2=$xml->day[1]->day_part[2]->temperature_to;
    $tom_f_3=$xml->day[1]->day_part[3]->temperature_from;
    $tom_t_3=$xml->day[1]->day_part[3]->temperature_to;

    // Если значение температуры положительно, для наглядности добавляем "+"
    //$tomorrow = array("tomorrow");
    if ($temp>0) {$temp='+'.$temp;}
    if ($tom_t_0>0) {$tom_t_0='+'.$tom_t_0;}
    if ($tom_f_0>0) {$tom_f_0='+'.$tom_f_0;}
    $pic_0=$xml->day[1]->day_part[0]->image;
    if ($tom_t_1>0) {$tom_t_1='+'.$tom_t_1;}
    if ($tom_f_1>0) {$tom_f_1='+'.$tom_f_1;}
    $pic_1=$xml->day[1]->day_part[1]->image;
    if ($tom_t_2>0) {$tom_t_2='+'.$tom_t_2;}
    if ($tom_f_2>0) {$tom_f_2='+'.$tom_f_2;}
    $pic_2=$xml->day[1]->day_part[2]->image;
    if ($tom_t_3>0) {$tom_t_3='+'.$tom_t_3;}
    if ($tom_f_3>0) {$tom_f_3='+'.$tom_f_3;}
    $pic_3=$xml->day[1]->day_part[3]->image;
//--------------------------------------------------
    $patterns = array();
    $patterns[0] = '/nw/';
    $patterns[1] = '/ne/';
    $patterns[2] = '/se/';
    $patterns[3] = '/sw/';
    $patterns[4] = '/n/';
    $patterns[5] = '/e/';
    $patterns[6] = '/s/';
    $patterns[7] = '/w/';
    $patterns[8] = '/calm/';
    $replacements = array();
    $replacements[0] = 'Северо-западный';
    $replacements[1] = 'Северо-восточный';
    $replacements[2] = 'Юго-восточный';
    $replacements[3] = 'Юго-западный';
    $replacements[4] = 'Северный';
    $replacements[5] = 'Восточный';
    $replacements[6] = 'Южный';
    $replacements[7] = 'Западный';
    $replacements[8] = 'Штиль';
    $rest =  substr($time, -8);
    $rest2 = substr($time, -11, -9);
    $rest1 = substr($time, -14, -12);
    $rest3 = substr($time, 0, 4);
?>

<div id="weather" align="center">
<?php
echo ("<align center><font size=10 face=Arial>Ленинск-Кузнецкий</font></align><br>");
echo ("<font color=#0000FF size=6>На $rest $rest2-$rest1-$rest3</font><br>");
echo ("<img src=\"http://img.yandex.net/i/wiz$pic.png\" alt=\"$type\"  width=\"100\"><h1>$temp<sup>o</sup>C, $type</h1>");
echo("<h1>Ветер ");
echo preg_replace($patterns, $replacements, $wind);
echo(" $speed м./с.</h1>");
?>
<br><align center><font size=6 face=Arial>На завтра</align>
<table border=1 align=center>
<tr><td>Утро</td><td>День</td><td>Вечер</td><td>Ночь</td></tr>
<tr><td><?php echo ("$tom_f_0 $tom_t_0<sup>o</sup>C") ?></td>
    <td><?php echo ("$tom_f_1 $tom_t_1<sup>o</sup>C") ?></td>
    <td><?php echo ("$tom_f_2 $tom_t_2<sup>o</sup>C") ?></td>
    <td><?php echo ("$tom_f_3 $tom_t_3<sup>o</sup>C") ?></td>
</tr>
<tr><td><?php echo ("<img src=\"http://img.yandex.net/i/wiz$pic_0.png\" width=\"50\">") ?></td>
    <td><?php echo ("<img src=\"http://img.yandex.net/i/wiz$pic_1.png\" width=\"50\">") ?></td>
    <td><?php echo ("<img src=\"http://img.yandex.net/i/wiz$pic_2.png\" width=\"50\">") ?></td>
    <td><?php echo ("<img src=\"http://img.yandex.net/i/wiz$pic_3.png\" width=\"50\">") ?></td>
</tr>
</table>
</div>
</body>
</html>
 
Сверху