Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Погода на сайт - Помогите разобраться в каракулях preg_match_all!
 
 автор: Zilog   (17.01.2007 в 00:50)   письмо автору
 
 

Вот код.


<?php 
  $text 
file_get_contents("http://informer.gismeteo.ru/xml/26850_1.xml"); 

  
$pattern "|<FORECAST day=\"([\d]+)\" month=\"([\d]+)\" year=\"([\d]+)\" hour=\"([\d]+)\" tod=\"([\d]+)\" predict=\"([\d]+)\" weekday=\"([\d]+)\".*<PRESSURE max=\"([\d]+)\" min=\"([\d]+)\".*<TEMPERATURE max=\"([^\"]+)\" min=\"([^\"]+)\".*<WIND min=\"([^\"]+)\" max=\"([^\"]+)\" direction=\"([^\"]+)\"|isU"
  
$text preg_match_all($pattern$text$out);  
  for(
$i 0$i count($out[0]); $i++) 
  { 
    echo 
"<b>".$out[3][$i].".".$out[2][$i].".".$out[1][$i]."</b><br>"
    echo 
"Давление ".$out[8][$i]." ... ".$out[9][$i]."<br>"
    echo 
"Температура ".$out[10][$i]." ... ".$out[11][$i]."<br>"
    echo 
"Ветер ".$out[12][$i]." ... ".$out[13][$i]." (направление ".$out[14][$i].")<br><br>"
  } 
?> 


Скажите пожалуйста, что за колдовство происходит в строчке


$pattern = "|<FORECAST day=\"([\d]+)\" month=\"([\d]+)\" year=\"([\d]+)\" hour=\"([\d]+)\" tod=\"([\d]+)\" predict=\"([\d]+)\" weekday=\"([\d]+)\".*<PRESSURE max=\"([\d]+)\" min=\"([\d]+)\".*<TEMPERATURE max=\"([^\"]+)\" min=\"([^\"]+)\".*<WIND min=\"([^\"]+)\" max=\"([^\"]+)\" direction=\"([^\"]+)\"|isU"; 


Где тут логика, и как подчинить этого монтра под собственные нужды?

   
 
 автор: LuxeMate   (17.01.2007 в 00:55)   письмо автору
 
   для: Zilog   (17.01.2007 в 00:50)
 

для того чтобы понять как это всё работает (а я тоже долго врубался),советую прочесть что нибудь этакое http://www.nncron.ru/help/RU/add_info/regexp.htm

   
 
 автор: Zilog   (17.01.2007 в 01:02)   письмо автору
 
   для: LuxeMate   (17.01.2007 в 00:55)
 

Спасибо, друг! Уже читаю.... стало понятней :)

кто бы ещё по человечески обьяснил что и в какие массивы заносится... тут смотрел
http://www.softtime.ru/dic/id_dic=136&id_group=3
но мало что понял....

   
 
 автор: LuxeMate   (17.01.2007 в 01:15)   письмо автору
 
   для: Zilog   (17.01.2007 в 01:02)
 

а вы попробуйте зделать так
print_r($arr);
где $arr это переменная в которую заносится массив,и увидите что то вроде этого


array
(
[0] => что то
[1] => что то ещё
[2] => что то другое
)


только поэксперементировав с примерами вы поймёте что к чему))

   
 
 автор: Zilog   (17.01.2007 в 01:46)   письмо автору
 
   для: LuxeMate   (17.01.2007 в 00:55)
 

Что-то пока не очень получается... :((((

ребят, может поможете кодом? смысл в том, что хочу вытянуть погоду вот так:


сейчас 
+3 .. +5

завтра
малооблачно, без осадков
днем +1 .. +3
ночью 0 .. +2 


непонимаю как из всей этой кучи вытащить нужное......

   
 
 автор: kasmanaft   (17.01.2007 в 05:43)   письмо автору
 
   для: Zilog   (17.01.2007 в 00:50)
 

Попробуйте Ваш цикл заменить на такой:

  for($i = 0; $i < count($out[0]); $i++)  
  {
       if (($out[4][$i] <= date("G") && $out[4][$i]+6 > date("G")) || ($out[4][$i] >= date("G") && $out[4][$i]-6 < date("G")))
       {  
           echo "Сейчас: <br>";
              echo "Температура ".$out[10][$i]." ... ".$out[11][$i]."<br><br>";  
       }
    
    if ($out[1][$i]-1 == date("j"))
    {  
        echo "Завтра: <br>";
        echo "Давление ".$out[8][$i]." ... ".$out[9][$i]."<br>";  
        echo "Температура ".$out[10][$i]." ... ".$out[11][$i]."<br>";  
        echo "Ветер ".$out[12][$i]." ... ".$out[13][$i]." (направление ".$out[14][$i].")<br><br>";
    }
  }

Будет что-то более менее похожее на то, что нужно ... само рег. выражение работает...

   
 
 автор: himic   (17.01.2007 в 06:59)   письмо автору
 
   для: kasmanaft   (17.01.2007 в 05:43)
 

Я подобным способом грузил себе на сайт цены LME ох как я долго мучился...

   
 
 автор: Zilog   (17.01.2007 в 22:29)   письмо автору
 
   для: kasmanaft   (17.01.2007 в 05:43)
 

неработает.... а сам я пока ещё не разобрался....

па-ма-ги-те!!!!

   
 
 автор: kasmanaft   (18.01.2007 в 06:41)   письмо автору
1.1 Кб
 
   для: Zilog   (17.01.2007 в 22:29)
 

Почему не работает? что-нибудь выводит?
Может быть у вас на сервере установлена "неправильная" временная зона ... какая версия php используется?
В пятой можно временную зону изменить с помощью функции date_default_timezone_set
Название вашей тайм.зоны можно посмотреть тут
- - -
Прикрепил скрипт, который у меня выводит
Сейчас: 
Температура 5 ... 3

Завтра: 
Давление 714 ... 712
Температура 6 ... 4
Ветер 7 ... 12 (направление 4)

Далее вам нужно создать массив, скажем ветров, где под индексами будет записано на человеческам языке, куда же он все-таки дует ...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования