为了账号安全,请及时绑定邮箱和手机立即绑定

无法理解此行(in_array)

无法理解此行(in_array)

PHP
白猪掌柜的 2022-12-30 17:40:23
我在一个网站上找到了这段代码,可以将摄氏度转换为华氏度和开尔文。但是我看不懂里面的一行。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 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

return 0是为了确保switch仅当您在$tab_val数组中使用值时该案例才有效。

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

因此,如果您使用 ,以外的任何符号C,函数将立即返回 0,而不执行扩孔代码。FK

因此,您的代码将在没有该行的情况下运行,直到您输入无效类型。

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

即使您使用ckorf而不是CKorF结果也将为 0,因为值区分大小写

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

上面代码的输出将为 0,因为我们使用f了而不是F


查看完整回答
反对 回复 2022-12-30
?
HUWWW

TA贡献1874条经验 获得超12个赞

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


// 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


查看完整回答
反对 回复 2022-12-30
  • 2 回答
  • 0 关注
  • 94 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信