无法理解此LINE(in_array)

时间:2020-04-18 08:14:26

标签: php arrays function return boolean

我在网站上找到了此代码,可将celcius转换为farentheit和kelvin。 但是我看不懂里面的一行。

function conv_temp($val , $type_val , $type_wanted) {
  $tab_val = array("C", "F", "K");
  if (!(in_array($type_val, $tab_val) && in_array($type_wanted,$tab_val)))
    return 0;
  switch ($type_val) {
    case "C" : // degrees Celsius
      switch ($type_wanted) {
        case "C" :
          return $val;
        case "F" :
          return ($val * 9 / 5 + 32);
        case "K" :
          return ($val + 273.16);
    case "F" : // degrees Fahrenheit
      switch ($type_wanted) {
        case "C" :
          return (($val - 32) * 5 / 9);
        case "F" :
          return $val;
        case "K" :
          return ((($val - 32) * 5 / 9) + 273.16);
    case "K" : // degrees Kelvin
      switch ($type_wanted) {
        case "C" :
          return ($val - 273.16);
        case "F" :
          return (($val - 273.16) * 9 / 5 + 32);
        case "K" :
          return $val;
        }
      }
    }
  }
}

echo conv_temp(5,'C','F')."\n";

?>;

in_array为什么必须return 0? 我删除了这一行,该功能仍然有效。

2 个答案:

答案 0 :(得分:0)

这是为了防止用户尝试使用不存在的温度符号调用函数的情况:

// EXAMPLE 1
echo conv_temp(5,'C','F')."\n";
// Output: 41

// EXAMPLE 2
echo conv_temp(5,'C','J')."\n";
// Output: 0

如果删除测试并再次运行示例2,则不会获得任何输出:

echo conv_temp(5,'C','J')."\n";
// Output: 

编辑

如果0被用作注释中建议的错误代码,我想这不是最好的主意。如果输入的温度实际上转换为0怎么办? :

$temp = conv_temp(-273.16,'C','K');
if ($temp == 0) {
  echo "Conversion failed";
} else {
  echo "$temp";
}

// Output: Conversion failed

答案 1 :(得分:0)

return 0用于确保只有在switch数组中使用with的情况下,$tab_val的情况才起作用。

$tab_val = array("C", "F", "K");

因此,如果您使用CFK以外的任何符号,该函数将立即返回0,而无需执行铰孔代码。

因此,在您输入无效的类型之前,您的代码无需该行即可工作。

如果输入无效的类型return 0,则输出结果为0,否则将为空白。

即使您使用ckf而不是CKF,由于自值区分大小写

echo conv_temp(5,'C','f')."\n";

由于我们使用f而不是F

,因此上述代码的输出为0