【问题标题】:PHP to display string 0 [closed]PHP显示字符串0 [关闭]
【发布时间】:2013-03-26 16:02:58
【问题描述】:

我需要此代码的帮助,我只需要在空的命中数据中显示一个字符串“0”,所以我想到的是第 1 天有 3 次点击,第 2 天有 0 次点击,我真的不知道怎么做要显示 0,请帮助我。谢谢

days || Hits
 1 - | | |- 3
 2 - | | |- 
 3 - | | |-
 4 - | | |- 
 5 - | | |- 5

代码如下:

$year = date("Y");
$month = $_POST['selected_date'];
if(!isset($month) or $_POST['selected_date'] == 0)
{
  $month = date("n");
}
 $num = cal_days_in_month(CAL_GREGORIAN, $month, $year);

    for($i = 1; $i <= $num; $i++)
    { 
     echo "<p >$i - ";

     $query = mysql_query("SELECT DATE_FORMAT(`LookbookLogDate`, '%m') as 'month', DATE_FORMAT(`LookbookLogDate`, '%d') as 'day',
COUNT(`LookbookLogID`) as 'total'
FROM LookbookLog
where Lookbook_LookbookID = $LookbookID and LookbookLogDate like '%2013-03%'
GROUP BY DATE_FORMAT(`LookbookLogDate`, '%m'), DATE_FORMAT(`LookbookLogDate`, '%d')");
        while($row = mysql_fetch_array($query))
        {
               $day = $row['day'];

           $total = $row['total'];

             if($day == $i) echo $total."</p>";
        }


    }

【问题讨论】:

标签: php mysql arrays loops


【解决方案1】:

我会从数据库中得到零,因为有一个通用的 SQL 函数可以实现一个很好的解决方案:

SELECT
DATE_FORMAT(`LookbookLogDate`, '%m') as 'month',
DATE_FORMAT(`LookbookLogDate`, '%d') as 'day',
COALESCE(COUNT(`LookbookLogID`),0) as 'total'
FROM LookbookLog
{snip}

这意味着如果 COUNT() 的结果中没有值,它将改为选择 0。然后,您的 echo 语句将继续正常工作,而无需特别检查应用程序中的 NULL 情况。

【讨论】:

    【解决方案2】:

    如果您执行echo 0,它将在屏幕上显示0,但是如果您执行echo false,则不会显示它。现在,您遇到的问题不是显示 0 而是显示 $total 的值。如果您的查询返回空集,那么您的 $row['total']falsenull,因此 echo falseecho null 将不会显示任何内容。

    使用var_dump 检查以确保您的查询返回了某些内容,并且$total 持有所需的值以查看它的类型。

    你需要类似的东西

       $total = ! empty($row['total']) ? $row['total'] : 0;
    

    【讨论】:

      【解决方案3】:

      您的问题是COUNT(...) 如果没有结果则返回 NULL 而不是 0,这可能是 PHP 在您输出时将其视为空字符串。您可以通过在 SQL 中添加 COALESCE expression 来解决此问题(在我看来,这是更好的解决方案):

      SELECT ... COALESCE(COUNT(`LookbookLogID`), 0) ...
      

      或者在 PHP 中检查:

      echo $row['total'] ? $row['total'] : 0;
      

      或多行版本:

      if($row['total'])
          echo $row['total'];
      else
          echo 0;
      

      请注意,您不需要进行任何比较或调用empty(),因为PHP 的类型转换treats null, empty string and 0 as false

      【讨论】:

        【解决方案4】:

        尝试使用 empty() 函数,empty() 函数将许多东西视为真值,这些值的列表请看这里http://php.net/manual/en/function.empty.php

        $total = (empty($row['total'])?0:$row['total']);
        

        更新:

        您只需要执行以下操作即可获得所需的结果。

        $total = ($row['total']?$row['total']:0);
        

        【讨论】:

          【解决方案5】:

          编辑:为什么不将字段设为int 并将默认值设置为0

          您没有显示任何有关如何构建表格的代码,但您会这样做:

          $total = ((!$row['total'] ? 0 : $row['total']);
          

          这段代码基本上说“如果$row['total'] 为空,则将其设为零。否则,使$total 等于返回的值。

          【讨论】:

          • 如果总计为空或假怎么办
          • @GGio 好点,已更新
          • @GGio 在 PHP 中不是 false、null 和 '' 都相等吗?
          • @BrendanLong 不,- "" 和 NULL 是完全不同的东西。
          • @Evan 是的,它们是不同的东西,但在 PHP 中它们仍然是相等的(除非您使用 ===)。见:php.net/manual/en/language.types.boolean.php
          猜你喜欢
          • 2023-04-03
          • 2016-03-03
          • 2021-03-12
          • 1970-01-01
          • 1970-01-01
          • 2020-12-29
          • 2016-09-08
          • 2015-10-22
          • 2014-04-24
          相关资源
          最近更新 更多