Получаю погоду с сервиса openweathermap и направление ветра в градусах PHP: $url = "http://api.openweathermap.org/data/2.5/weather?id=".$cityId."&lang=".$lang."&units=".$units."&APPID=" . $apiKey; // делаем запрос к апи $contents = file_get_contents($url); $weather=json_decode($contents); $deg=$weather->wind->deg; //получаем направление ветра в градусах есть вот такая функция: PHP: function getCardinalDirection($deg) { const directions = ['↑ N', '↗ NE', '→ E', '↘ SE', '↓ S', '↙ SW', '← W', '↖ NW']; return directions[Math.round($deg / 45) % 8]; } и дали еще такой совет: PHP: list(...) = exp(...) ? array(...) : array(...); как из переменной $deg получить переменную $deg2 с новыми значениями когда $deg=200, а $deg2=↑ N как то так мне в дальнейшем надо будет переменная для: PHP: if($view_deg2){ $draw->setFont(BASEPATH."/font/".$font_deg); $draw->setTextAlignment(Imagick::ALIGN_CENTER); $draw->setFontSize($deg_font_size); $draw->setFillColor("rgb(".$deg_font_color.")"); $bg->annotateImage($draw, $deg_text_pixel_x, $wind_text_pixel_y, 0, $deg2); } $bg->annotateImage($draw, $deg_text_pixel_x, $deg_text_pixel_y, 0, $deg2);
В смысле? Код (Text): $deg2 = $deg + 180; if($deg >= 180) $deg2 = $deg - 180; echo getCardinalDirection($deg2); Так?
выше написанная функция мной приведена для примера, я ее не смог использовать, поэтому вряд ли смогу ваш пример реализовать верно для себя, переменная $deg может иметь любое число от 0 до 360 я так понимаю, направление ветра, поэтому было бы неплохо, полностью написать как было бы правильно, не силен в php --- Добавлено --- всю погоду осилил, а в направлениях застопорился
А так? PHP: <?php function getCardinalDirection($deg) { $array = array('↑ N', '? NE', '→ E', '? SE', '↓ S', '? SW', '← W', '? NW'); return $array[round(($deg / 45) % 8)]; } $deg = 250; echo getCardinalDirection($deg); echo '<br>'; $deg2 = $deg + 180; if($deg >= 180) $deg2 = $deg - 180; echo getCardinalDirection($deg2); ?>
забыл уточнить, на картинке прорисовалось значение 70, а на странице вывелось ? SW ? NE надо как то избавится от echo --- Добавлено ---
там должно вместо 70 градусов показать , ← W например, ветер 6м/с ← W то есть направление, а не цифровое значение 70
Понятно. Это бесполезная трата ресурсов Нарисуйте восемь иконок с нужными направлениями стрелок. Затем строку $array = array('↑ N', '? NE', '→ E', '? SE', '↓ S', '? SW', '← W', '? NW'); в вашей функции замените на $array = array('picN.png', 'picNE.png', 'picE.png', 'picSE.png', 'picS.png', 'picSW.png', 'picW.png', 'picNW.png'); Далее в нужном месте Код (Text): echo'<img src="'.getCardinalDirection($deg).'">';
переменная $deg имеет переменное число, откуда он поймет что при числе 270 нужно вывести допустим picSE.png и просто <img src="' не прокатит, чтоб получить рисунок надо подключить Imagick, может и нет, напишите полностью, чтоб не намудрить мне пожалуйста я так понимаю 'picN.png' тут путь до файла?
Кстати. Можно обойтись всего одной иконкой. И без самописных функций. Вот почитайте https://webref.ru/recipe/2323
как $array узнает что надо вывести picN.png при значении $deg равным 231 градус еще мне кажется не информативным иметь 6м/с и какая то стрелка, вместо 6м/с ←сз --- Добавлено --- я все php делаю и в этом большая загвоздка, в html было бы наверно проще , но деваться мне некуда , все в php
Не готов ответить на этот вопрос. Почитайте что такое массивы. Что в них является ключом, а что значением. Что такое функции, в частности round(). Пользовательские функции Что такое return
если бы были соответствующие знания я хоть как то трепыхался, читать мануал мало, его еще надо уметь применить, а что вы скажите про такой вариант, как все это в одну строку сделать? PHP: list(...) = exp(...) ? array(...) : array(...);
Что именно? Скрипт выше выдает значение массива .$array в зависимости от значения $deg. Что в этом массиве содержится, зависит от вас. Можете туда поместить текст, можете картинку.
$a=$deg (...) как все это написать чтобы указав переменную $a содержалось направление ветра, когда как переменная $deg содержит лишь число в градусах как пример: echo $a выводило NW Переменная $deg получила другие значения, соответственно $a показывает другой результат Знал бы как сделать, разве бы просил написать решение. Нулевой почти опыт. посоветовали, но как написать если знаний не хватает, что куда писать: $a = true ? ['a', 'b'] : ['c', 'd']; var_dump($a); // array(2) { [0]=> string(1) "a" [1]=> string(1) "b" } А к возвращаемому массиву применить list(), тогда: list($a, $b) = false ? ['a', 'b'] : ['c', 'd']; echo $a . ' / ' . $b; // c / d
Код (Text): <?php function getCardinalDirection($deg) { $array = array('↑ N', '? NE', '→ E', '? SE', '↓ S', '? SW', '← W', '? NW'); return $array[round(($deg / 45) % 8)]; } $deg = 250; $a = getCardinalDirection($deg); $deg2 = $deg + 180; if($deg >= 180) $deg2 = $deg - 180; $b = getCardinalDirection($deg2); echo $a.'<br>'.$b; ?> Всё остальное можно отбросить. Предполагаю, что это вам советовали варианты решения.
спасибо помогло но немного скорректировал, потому как показывало на прямо противоположное значение вместо южного показывал северный ветер поэтому предположил что стоит убрать все с 180 градусами и оставил до $a, а нижнее убрал и стало показывать все как надо, еще такой вопрос, вы предлагали заменить текст на png, а можно все это совместить, чисто технический вопрос, уже рад этому результату $array = array('↑ N'+ 'picN.png', '? NE', '→ E', '? SE', '↓ S', '? SW', '← W', '? NW');
Можно. Но смыcл? Максимум, чего вы добьетесь, это прорисовка надписи на изображении с помощью GD. Тоже самое можно сделать куда эффективней с помощью CSS.