Подскажите как правильно подправить условия? сейчас при заходе на страницу браузер выдает ошибку HTTP ERROR 500
if (count($this->forecast)>0) { foreach ($this->forecast as $date=>$daypart) :
echo $date
foreach ($daypart as $dp=>$data) :
echo str_pad($dp,2,'0',STR_PAD_LEFT);
echo $data['symb'];
echo $data['t']['min'];
echo $data['t']['max'];
if (($data['p']['min']) > 0) :
echo "Давление" .round($data['p']['min']*0.75006375541921). "мм. рт. ст.";
endif;
endforeach;
endforeach;
} else {
echo "В данный момент информация о погоде отсутствует";
}
На строке 57-58 вы используете $this внутри исполняемого файла (не метода из класса), по логике вещей вы должны выполнить функцию, получить результаты и дальше уже парсить, но парсинг там немного некорректный т.к. город и данные по нему лежат на одном уровне вложенности. Нужно чтобы массив выглядел таким образом
'data' => [
'city' => ['data_about_weather'],
'city_2' => ['data_about_weather'],
]
А вообще советую вам почитать что такое функциональное программирование и что такое ООП. И в чем разница. Вы сейчас пытаетесь смешать функциональщину и ООП.
Прикладываю весь код:
<?php
function getForecastXML($cid='579432') {
$cid = "579432";
$hoffset = "4";
$appid= "d86ad74d22ce9cc528d8baee65acd408";
$lang= "ru";
$days = array();
$xml = @file_get_contents("http://api.openweathermap.org/data/2.5/forecast?id=$cid&mode=xml&appid=$appid&lang=$lang&type=like");
if ($xml===false) { return;} else {
$xml = simplexml_load_string($xml);
$cityname = (string)$xml->location->name;
$weekdays[0] = "Воскресенье";
$weekdays[1] = "Понедельник";
$weekdays[2] = "Вторник";
$weekdays[3] = "Среда";
$weekdays[4] = "Четверг";
$weekdays[5] = "Пятница";
$weekdays[6] = "Суббота";
if (count($xml->forecast->time)>0){
foreach ($xml->forecast->time as $fpart) {
$forecast = array();
$attr = $fpart->attributes();
$forecast['t']['min'] = (string)round(($fpart->temperature->attributes()->min)-273,15,PHP_ROUND_HALF_UP);
$forecast['t']['min'] = $forecast['t']['min'] > 0 ? "+".$forecast['t']['min'] : $forecast['t']['min'];
$forecast['t']['max'] = (string)round(($fpart->temperature->attributes()->max)-273,15,PHP_ROUND_HALF_UP);
$forecast['t']['max'] = $forecast['t']['max'] > 0 ? "+".$forecast['t']['max'] : $forecast['t']['max'];
$forecast['p']['min'] = (string)round($fpart->pressure->attributes()->value,0,PHP_ROUND_HALF_UP);
// $forecast['p']['max'] = (string)$fpart->PRESSURE->attributes()->max;
$forecast['w']['min'] = (string)round($fpart->windSpeed->attributes()->mps,0,PHP_ROUND_HALF_UP);
//$forecast['w']['max'] = (string)$fpart->WIND->attributes()->max;
//$forecast['w']['rumb'] = (string)$fpart->WIND->attributes()->direction;
$forecast['h']['min'] = (string)$fpart->humidity->attributes()->value;
//$forecast['h']['max'] = (string)$fpart->RELWET->attributes()->max;
$forecast['symb'] = (string)$fpart->symbol->attributes()->name;
$forecast['pict'] = (string)$fpart->symbol->attributes()->var;
$date = date('c',strtotime($hoffset.' hours',strtotime($attr['from'])));
$hour = date('H',strtotime($date));
$forecast['timestamp'] =strtotime($date);
$date = strtotime($date);
$dayofweek = date('w',$date);
$date = $weekdays[$dayofweek]." ".date('d.m',$date);
if ($forecast['timestamp'] > time()){
$days[$date][$hour] = $forecast;
}
}
} else {$days=array();}
}
return [$cityname => $days];
}
$outputData = array();
$forecast = getForecastXML();
if (count($forecast) > 0) {
foreach ($forecast as $date => $daypart) {
$outputData[] = $date;
foreach ($daypart as $dp => $data) {
$outputData[] = str_pad($dp, 2, '0', STR_PAD_LEFT);
$outputData[] = $data['symb'];
$outputData[] = $data['t']['min'];
$outputData[] = $data['t']['max'];
if (($data['p']['min']) > 0) {
$outputData[] = "Давление " . round($data['p']['min'] * 0.75006375541921) . "мм. рт. ст.";
}
}
}
} else {
$outputData[] = "В данный момент информация о погоде отсутствует";
}
echo implode(' ', $outputData);
//Выводим данные на сайт
/*if (count($this->forecast)>0) { foreach ($this->forecast as $date=>$daypart) :
echo $date;
foreach ($daypart as $dp=>$data) :
echo str_pad($dp,2,'0',STR_PAD_LEFT);
echo $data['symb'];
echo $data['t']['min'];
echo $data['t']['max'];
if (($data['p']['min']) > 0) :
echo "Давление" .round($data['p']['min']*0.75006375541921). "мм. рт. ст.";
endif;
endforeach;
endforeach;
} else {
echo "В данный момент информация о погоде отсутствует";
}*/
?>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как получить путь к странице с которой сделан переход, типа $_SERVER['HTTP_REFERER'] только нужен именно путь без http://
Для того, чтобы пользоваться MediaPlayer, нужно использовать его в JavaFX потокеСамая простая программа для запуска JavaFX приложения выглядит примерно...
Почему при компиляции в Java - массив int преобразуется в массив Object? Ведь int это примитивный типКаким образом оно все становится объектом и главное...