Как поправить условия

155
04 марта 2021, 03:50

Подскажите как правильно подправить условия? сейчас при заходе на страницу браузер выдает ошибку 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 "В данный момент информация о погоде отсутствует";
}
Answer 1

На строке 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 "В данный момент информация о погоде отсутствует";
}*/
?>
READ ALSO
Проблема с запросом

Проблема с запросом

Возникла такая проблемаИмеется вот такой код:

86
Получить полный путь

Получить полный путь

Как получить путь к странице с которой сделан переход, типа $_SERVER['HTTP_REFERER'] только нужен именно путь без http://

114
MediaPlayer(FX) вне JavaFX приложения

MediaPlayer(FX) вне JavaFX приложения

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

101
Почему int [] компилируется в Object []?

Почему int [] компилируется в Object []?

Почему при компиляции в Java - массив int преобразуется в массив Object? Ведь int это примитивный типКаким образом оно все становится объектом и главное...

100