Помощник
|
"Нулевое" преобразование типов |
PRStudio
|
Сообщение
#1
|
||
|
|
||
|
|||
NiKON_hb |
22.6.2011, 22:44;
Ответить: NiKON_hb
Сообщение
#2
|
|
[PHP]
$val = "2.2"; echo gettype($val); //string $val = $val * 1; echo gettype($val); //double [/PHP] Вот так например. Даже проверил. |
|
|
PRStudio
|
Сообщение
#3
|
|
Спасибо, это действительно будет работать, но только не у меня :) Вся "фишка" в том, что тип изменяется, но данные из переменной превратятся в ноль. Хотя на вашем примере все будет работать отлично, а php еще и сам автоматом тип нужный подставит. В моем же случае такое почему-то не работает (на примере работы функции парсинга). Я буре блок из XML, режу его, выгребаю число, но не могу с ним ничего сделать, для меня это бесполезная строка, которую не округлишь и ни с чем не сравнишь.
Вот собственно сырой "парсер". Он производит парсинг текущей погоды из GET запроса с именем id. ID должен быть существующим на rp5.by. Я для тестов использую 31. Т.е. ссылка на XML имеет такой вид: http://rp5.by/xml/31/ru Для вызова необходимо запустить ссылку вида: данный_скрипт.php?id=31 и чуть не забыл, не забудьте (кто решиться помочь) вызвать функцию PrintWeather(); Исходник: [PHP]<?php // Недоделанный масив с городами $weather_infos = array( "31" => "Витебск", "orsha" => "44", "polotsk" => "", "novopolotsk" => "", "glubokoe" => "" ); // Для уменьшения времени загрузки делаем презагрузку XML if ($_GET['id'] != null){ $parse_info = file_get_contents("http://rp5.by/xml/".$_GET['id']."/ru"); // Получаем содержание XML $parse_cp1251=iconv('utf-8','cp1251',$parse_info); // Меняем кодировку } function ParseWeather(){ GLOBAL $parse_cp1251 ; //$region = $_GET['id']; // Пока нигде не используется // Получить все блоки сводок preg_match_all ("!<timestep>(.*?)</timestep>!sei", $parse_cp1251, $timesteps); // $timesteps[0][0] - первый блок // $timesteps[0][1] - второй блок // $timesteps[0][2] - третий блок // $timesteps[0][3] - четвертый блок return $timesteps; } function ParseInfoWeather($num,$type){ $perv_info_array = ParseWeather(); // Загружаем все блоки в переменную $perv_info = $perv_info_array[0][$num]; // Выгребаем нужный блок (их всего 4) // Начинаем парсить информацию из XML // Parse HHii preg_match("!<HHii>(.*?)</HHii>!sei",$perv_info,$HHii); // Время прогноза // Parse datetime preg_match("!<datetime>(.*?)</datetime>!sei",$perv_info,$datetime); // Полная дата пика прогноза // Parse precipitation preg_match("!<precipitation>(.*?)</precipitation>!sei",$perv_info,$precipitation); // Осадки // Parse cloud_cover preg_match("!<cloud_cover>(.*?)</cloud_cover>!sei",$perv_info,$cloud_cover); // Облачность // Parse pressure preg_match("!<pressure>(.*?)</pressure>!sei",$perv_info,$pressure); // Давление // Parse temperature preg_match("!<temperature>(.*?)</temperature>!sei",$perv_info,$temperature); // Температура // Parse humidity preg_match("!<humidity>(.*?)</humidity>!sei",$perv_info,$humidity); // влажность // Parse wind_direction preg_match("!<wind_direction>(.*?)</wind_direction>!sei",$perv_info,$wind_direction); // Направление ветра // Parse wind_velocity preg_match("!<wind_velocity>(.*?)</wind_velocity>!sei",$perv_info,$wind_velocity); // Скорость ветра // Parse falls preg_match("!<falls>(.*?)</falls>!sei",$perv_info,$falls); // Тип осадков // Parse drops preg_match("!<drops>(.*?)</drops>!sei",$perv_info,$drops); // Соотношение осадков // Мне не нужно время, оно уже есть, обрезаю и беру дату пика $datetime_print = explode(" ",$datetime[0]); $datetime_print = $datetime_print[0]; // Организую централизированные запросы к функции для удобства вызова нужной информации switch ($type){ case 'HHii':$return = $HHii[0]; break; case 'datetime':$return = $datetime_print; break; case 'precipitation':$return = $precipitation[0]; break; case 'cloud_cover':$return = $cloud_cover[0]; break; case 'pressure':$return = $pressure[0]; break; case 'temperature':$return = $temperature[0]; break; case 'humidity':$return = $humidity[0]; break; case 'wind_direction':$return = $wind_direction[0]; break; case 'wind_velocity':$return = $wind_velocity[0]; break; case 'falls':$return = $falls[0]; break; case 'drops':$return = $drops[0]; break; } return $return; } // Вывод картинки на экран (солнышко, дождик и т.п., функция бесполезна без изменения типа исходных данных) function pofanWeatherImage($id){ $time = ParseInfoWeather($id,'HHii'); $wind_dir = ParseInfoWeather($id,'wind_direction'); $wind_vel = ParseInfoWeather($id,'wind_velocity'); // Злаполучная переменная, должна быть float $cloud_cover = ParseInfoWeather($id,'cloud_cover'); // Злаполучная переменная, должна быть float $drops = ParseInfoWeather($id,'drops'); // Злаполучная переменная, должна быть float $falls = ParseInfoWeather($id,'falls'); // Злаполучная переменная, должна быть int // Массив возможных изображений (сырой) $images = array( "sun_full_5" => "sunny.png", "sun_10" => "cloudy1.png", "sun_20" => "cloudy2.png", "sun_30" => "cloudy3.png", "sun_40" => "cloudy4.png", "sun_50" => "cloudy5.png", "rain_n_snow" => "sleet.png", "rain_0" => "shower1.png", "rain_4" => "shower2.png", "rain_6" => "shower3.png" ); // Следующий код бесполезен, пока не изменятся типы данных, следующий код не работает (работает неверно) if ($falls == 0 && $cloud_cover >= 0 && $cloud_cover <= 5){ $return = $images['sun_full_5']; } if ($falls == 0 && $cloud_cover >5 && $cloud_cover <=10){ $return = $images['sun_10']; } if ($falls == 0 && $cloud_cover >10 && $cloud_cover <=20 ){ $return = $images['sun_20']; } if ($falls == 0 && $cloud_cover >20 && $cloud_cover <=30 ){ $return = $images['sun_30']; } if ($falls == 0 && $cloud_cover >30 && $cloud_cover <=40 ){ $return = $images['sun_40']; } if ($falls == 0 && $cloud_cover >40){ $return = $images['sun_50']; } return $return; } // Выводим погоду на экран function PrintWeather(){ // Следующие переменные должны быть округлены, но они не округляются и принимают нули, но исходные нули не все (все зависит от сводок погоды, но обычно есть число больше 1 - 2), но у нас, оно будет ноль, ибо тип данных не изменяется // Все данные при попытке изменения типа обнуляются :( $parse_prec_1 = ParseInfoWeather(0,'precipitation'); $parse_prec_1 = (float)$parse_prec_1; $parse_prec_1 = round($parse_prec_1); $parse_prec_2 = ParseInfoWeather(1,'precipitation'); $parse_prec_2 = (float)$parse_prec_2; $parse_prec_2 = round($parse_prec_2); $parse_prec_3 = ParseInfoWeather(2,'precipitation'); $parse_prec_3 = (float)$parse_prec_3*1; $parse_prec_3 = round($parse_prec_3); $parse_prec_4 = ParseInfoWeather(3,'precipitation'); $parse_prec_4 = (float)$parse_prec_4; $parse_prec_4 = round($parse_prec_4); // Формируем вывод $return = ' <table width="550" border="0" cellpadding="0" cellspacing="0"> <tr> <td><div align="left"></div></td> <td><div align="center">'.ParseInfoWeather(0,'datetime').'</div></td> <td><div align="center">'.ParseInfoWeather(1,'datetime').'</div></td> <td><div align="center">'.ParseInfoWeather(2,'datetime').'</div></td> <td><div align="center">'.ParseInfoWeather(3,'datetime').'</div></td> </tr> <tr> <td><div align="left"></div></td> <td><div align="center"><img src="additions/images/weather/'.pofanWeatherImage(0).'"/></div></td> <td><div align="center"><img src="additions/images/weather/'.pofanWeatherImage(1).'"/></div></td> <td><div align="center"><img src="additions/images/weather/'.pofanWeatherImage(2).'"/></div></td> <td><div align="center"><img src="additions/images/weather/'.pofanWeatherImage(3).'"/></div></td> </tr> <tr> <td><div align="left">Время</div></td> <td><div align="center">'.ParseInfoWeather(0,'HHii').'</div></td> <td><div align="center">'.ParseInfoWeather(1,'HHii').'</div></td> <td><div align="center">'.ParseInfoWeather(2,'HHii').'</div></td> <td><div align="center">'.ParseInfoWeather(3,'HHii').'</div></td> </tr> <tr> <td><div align="left"><b>Температура</b></div></td> <td><div align="center"><b>'.ParseInfoWeather(0,'temperature').'°C</b></div></td> <td><div align="center"><b>'.ParseInfoWeather(1,'temperature').'°C</b></div></td> <td><div align="center"><b>'.ParseInfoWeather(2,'temperature').'°C</b></div></td> <td><div align="center"><b>'.ParseInfoWeather(3,'temperature').'°C</b></div></td> </tr> <tr> <td><div align="left">Осадки</div></td> <td><div align="center">'.$parse_prec_1.' мм</div></td> <td><div align="center">'.$parse_prec_2.' мм</div></td> <td><div align="center">'.$parse_prec_3.' мм</div></td> <td><div align="center">'.$parse_prec_4.' мм</div></td> </tr> <tr> <td><div align="left">Облачность</div></td> <td><div align="center">'.ParseInfoWeather(0,'cloud_cover').' %</div></td> <td><div align="center">'.ParseInfoWeather(1,'cloud_cover').' %</div></td> <td><div align="center">'.ParseInfoWeather(2,'cloud_cover').' %</div></td> <td><div align="center">'.ParseInfoWeather(3,'cloud_cover').' %</div></td> </tr> <tr> <td><div align="left">Давление</div></td> <td><div align="center">'.ParseInfoWeather(0,'pressure').'<br/>мм. рт.ст.</div></td> <td><div align="center">'.ParseInfoWeather(1,'pressure').'<br/>мм. рт.ст.</div></td> <td><div align="center">'.ParseInfoWeather(2,'pressure').'<br/>мм. рт.ст.</div></td> <td><div align="center">'.ParseInfoWeather(3,'pressure').'<br/>мм. рт.ст.</div></td> </tr> <tr> <td><div align="left">Влажность</div></td> <td><div align="center">'.ParseInfoWeather(0,'humidity').' %</div></td> <td><div align="center">'.ParseInfoWeather(1,'humidity').' %</div></td> <td><div align="center">'.ParseInfoWeather(2,'humidity').' %</div></td> <td><div align="center">'.ParseInfoWeather(3,'humidity').' %</div></td> </tr> <tr> <td><div align="left">Ветер</div></td> <td><div align="center">'.ParseInfoWeather(0,'wind_direction').'<br/>'.ParseInfoWeather(0,'wind_velocity').' м/с</div></td> <td><div align="center">'.ParseInfoWeather(1,'wind_direction').'<br/>'.ParseInfoWeather(1,'wind_velocity').' м/с</div></td> <td><div align="center">'.ParseInfoWeather(2,'wind_direction').'<br/>'.ParseInfoWeather(2,'wind_velocity').' м/с</div></td> <td><div align="center">'.ParseInfoWeather(3,'wind_direction').'<br/>'.ParseInfoWeather(3,'wind_velocity').' м/с</div></td> </tr> <tr> <td colspan="5" align="right"><a href="http://rp5.by/'.$_GET['id'].'/ru"><img src="additions/images/weather/rp5_logo.png"></a></td> </tr> </table> '; return $return; } ?>[/PHP] Заранее благодарен, особенно тем кто решиться все это прочитать и вникнуть :) |
|
|
alexdrob |
23.6.2011, 1:59;
Ответить: alexdrob
Сообщение
#4
|
|
http://php.net/manual/ru/function.preg-match.php
Элемент $matches[0] будет содержать часть строки, соответствующую вхождению всего шаблона, $matches[1] - часть строки, соответствующую первой подмаске, и так далее.
|
|
|
ZhukV |
23.6.2011, 3:42;
Ответить: ZhukV
Сообщение
#5
|
|
А зачем тогда менять тип???
Вы сможете и так его спокойно округлить функциями rang, floor ..... В ПХП нет строгих правил типов данных, разве что для ООП. [PHP] $t = "1.25871"; echo gettype($t); $t = floor($t); // Или что-то другое [/PHP] |
|
|
ZhukV |
23.6.2011, 3:48;
Ответить: ZhukV
Сообщение
#6
|
|
1. Ваш парсер может давать болше нагрузки, поскольку у Вас не рациональное использования функции preg_match. Установите регулярки в блоки case.
2. Такого рода парсера лучше делать при помощи XML -- DOMElement -- http://php.net/manual/ru/class.domelement.php . С ним можно пропарсить все что угодно + он сам может подгружать документы. Если к примеру Вам нужно вывести нуль, а он не выводится, из-за того, что это пустое значение, тогда лучше -- print empty($var) ? '0' : $var; |
|
|
alexdrob |
23.6.2011, 4:11;
Ответить: alexdrob
Сообщение
#7
|
|
Вы сможете и так его спокойно округлить функциями rang, floor .... не сможет, он и создал тему, потому что у него при таком коде [PHP]$t = "1.25871"; $t = floor($t);[/PHP] выходит 0 а всё потому что он немного не правильно код написал, у него перед числом есть текстовые символы, результат всегда будет 0. Подсказка тут http://php.net/manual/ru/function.preg-match.php
Элемент $matches[0] будет содержать часть строки, соответствующую вхождению всего шаблона, $matches[1] - часть строки, соответствующую первой подмаске, и так далее. |
|
|
PRStudio
|
Сообщение
#8
|
|
|
спасибо alexdrob, действительно я не правильно использовал preg_match, мне нужно было первое вхождение т.е. [1], теперь все работает :goodpost:
|
|
|
||
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Требуется помощь по сайту на "ВордПресс" Закрылся доступ в панель администратора |
12 | Tia2 | 1533 | 25.3.2024, 6:54 автор: Skyworker |
|
✅ sms.chekons.com - ⭐ Сервис для получения SMS на реальные номера USA "Non-VoIP, безлим SMS, API" ⭐ Сервис для получения SMS на реальные номера USA |
10 | Chekon | 3582 | 24.3.2024, 14:15 автор: Chekon |
|
⭐⭐⭐ Google Voice | Gmail - OLD аккаунты "SMS и звонки" ⭐⭐⭐ | 12 | Chekon | 3818 | 24.3.2024, 13:56 автор: Chekon |
|
Опрос: Результаты в упражнении "Жим лёжа" у вэбмастеров | 35 | Room | 4465 | 13.3.2024, 13:10 автор: Room |
|
"Лежащий" домен - 10 лет. Продать? | 8 | Wolfhound | 2386 | 5.3.2024, 3:22 автор: Liudmila |
Текстовая версия | Сейчас: 29.3.2024, 12:59 |