【问题标题】:PHP if greater than [duplicate]PHP如果大于[重复]
【发布时间】:2019-02-25 11:23:05
【问题描述】:

如果$mqmtxt 的数值大于20,我将尝试回显特定消息。

值在 txt 文件中,值为 7,因此应该显示 NO WARN,但显示的是 WARN。不确定我在这里缺少什么。

<?php
   $mqmtxt = file_get_contents("./MQM/mqmcount.txt");
   $mqmtxt = preg_replace('/[\x00-\x1F\x7F-\xFF]/', '', $mqmtxt);
   if ($mqmtxt >= "20"){
      $mqmwarning = "WARN";
   }else{
      $mqmwarning = "NO WARN";
   }
?>

<!DOCTYPE html>
<html>
    <body>
        <div id="dispmqmcount"><?php echo $mqmtxt; ?></div>
        <div id="warning"><?php echo $mqmwarning; ?></div>
    </body>
</html>

【问题讨论】:

  • 什么是var_dump($mqmtxt);
  • 将此行 if ($mqmtxt >= "20"){ 更改为 if ($mqmtxt >= intval("20")){
  • 您正在进行字符串比较,而不是 int 比较。试试casting
  • 对 $mqmtxt 进行类型转换。如果 ( (int)$mqmtxt >= 20) {....)
  • 下面的答案(和评论)都解决了这个问题,如问题中所述,转储为 7。谢谢大家

标签: php


【解决方案1】:

您将字符串 "7" 与字符串 "20" 进行比较,并且由于 '7' &gt; '2' 您的 if 测试通过并显示 WARN。您需要将两个值都转换为整数才能正确比较,例如

if ((int)$mqmtxt >= 20) {

【讨论】:

  • 在比较过程中,变量总是隐式转换为整数,因此无需强制转换为 int
  • @emix 总是?!由于您也可以使用大于号运算符来比较字符串,因此这是不正确的。
  • 不确定你的意思@deceze。您可以比较字符串,但在 PHP 这样做之前,双方都转换为int
  • @emix 你是说'foo' &gt; 'bar' 中的两个字符串在比较之前都被转换为整数?!
  • 你把我的话当真了;)当然有这种类型的杂耍魔法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-13
相关资源
最近更新 更多