使用php缩短if else语句

时间:2017-04-06 15:51:59

标签: php

我有一个关于缩短if else声明的问题。我正在尝试使用OpenWeatherMap api制作天气应用程序。但我不喜欢那些图标。我想改变这样的图标:

if($desc == 'clear sky'){
  $weather_icon = 'clear_sky.png';
}else
if($desc == 'few clouds'){
  $weather_icon = 'few_clouds.png';
}else
if($desc == 'scattered clouds'){
  $weather_icon = 'scattered_clouds.png';
}else
if($desc == 'broken clouds'){
  $weather_icon = 'broken_clouds.png';
}else
if($desc == ''){
  .....
}
......

所以我的问题是如何缩短if else或者你有什么想法使用不同的想法?

5 个答案:

答案 0 :(得分:3)

由于您的描述符合您所寻找的内容,因此您可以执行此操作。

if (
    in_array(
        $desc,
        array(
            'clear sky',
            'few clouds',
            'scattered clouds',
            'broken clouds'
        )
    )
) {
    $weather_icon = str_replace(' ', '_', $desc) . '.png';
}

另一种选择是使用地图,他们并不总是匹配。

$map = [
    'clear sky' => 'clear_sky.png',
    'few clouds' => 'few_clouds.png',
    'scattered clouds' => 'scattered_clouds.png',
    'broken clouds' => 'broken_clouds.png',
    'thunderstorm with light rain' => 'few_clouds.png',
];

// $api['icon'] references the original icon from the api
$weather_icon = array_key_exists($desc, $map) ? $map[$desc] : $api['icon'];

答案 1 :(得分:3)

数组是将宇宙保持在一起的粘合剂(如果宇宙是用PHP编写的)。

$map = [
   'clear sky' => "clear_sky.png",
   'few clouds' =>"few_clouds.png", 
   'scattered clouds' => 'scattered_clouds.png'
   'broken clouds' => 'broken_clouds.png'
];

if (isset($map[$desc])) {
   $weather_icon = $map[$desc];
} 

这使您还可以将不相关的单词与图像名称以及多个单词映射到同一图像。

答案 2 :(得分:2)

如果你的天气模式是可以预测的,你可以使用一个班轮:

$img = str_replace ( ' ' , '_', $desc ) . '.png';

但是如果你有一个你不能只是动态改变的列表,你可以使用它:

$descriptions = [
     'clear sky'=>'clear_sky',
     'few clouds'=>'few_clouds',
     'scattered clouds'=>'scattered_clouds',    
     'broken clouds'=>'broken_clouds',    
];

$defaultImg = 'some_empty';

$img = !empty($desc) ? $descriptions[$desc] : $defaultImg;
$img = $img . 'png';

答案 3 :(得分:0)

<?php
$desc = "clear sky";
$weather_icon = str_replace(" ","_",$desc).".png";
echo $weather_icon;
?>

答案 4 :(得分:0)

看起来你有一些固定的符号。你可以用这个:

<?php
$desc = 'clear sky';
convertDescriptionToImage( $desc );

function convertDescriptionToImage( $description )
{
    $arrayCodes = ["clear sky", "few clouds"];
    if ( TRUE == in_array( $description, $arrayCodes ) )
    {
        return str_replace( " ", "_", "$description.png" );
    }

    die( "$description not found" );
}