无法理解此行(in_array)

我在一个网站上找到了这段代码,可以将摄氏度转换为华氏度和开尔文。但是我看不懂里面的一行。


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?我删除了这一行,该功能仍然有效。


白猪掌柜的
浏览 142回答 2
2回答

天涯尽头无女友

这return 0是为了确保switch仅当您在$tab_val数组中使用值时该案例才有效。$tab_val = array("C", "F", "K");因此,如果您使用 ,以外的任何符号C,函数将立即返回 0,而不执行扩孔代码。FK因此,您的代码将在没有该行的情况下运行,直到您输入无效类型。如果输入无效类型return 0则输出结果为0,否则为空。即使您使用c, korf而不是C, KorF结果也将为 0,因为值区分大小写echo conv_temp(5,'C','f')."\n";上面代码的输出将为 0,因为我们使用f了而不是F

HUWWW

这是为了防止用户尝试使用不存在的温度符号调用函数的情况:// EXAMPLE 1echo conv_temp(5,'C','F')."\n";// Output: 41// EXAMPLE 2echo 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
打开App,查看更多内容
随时随地看视频慕课网APP