首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP: foreach (显示额外数据)

PHP: foreach (显示额外数据)
EN

Stack Overflow用户
提问于 2016-09-05 13:33:31
回答 2查看 110关注 0票数 0

显示以下内容的额外数据:

我从foreach循环中得到了一种奇怪的数据。我的日子和时间重复了两次。(请参阅附图)。但是我不想显示最后一行的数据。可以请某人帮助解决方案。谢谢

我的代码如下:

代码语言:javascript
复制
<button class="btn btn-primary" type="button" data-toggle="collapse" data-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample"> Timings </button>
<div class="collapse" id="collapseExample">
<div class="well">
<?php

      date_default_timezone_set('Australia/Melbourne');
      $datetime = new \DateTime();

      $listItem = array('<li class="active">', '</li>');

     $curDay = date('l');

      $status = array( "Now Open" ,"Closed",  "Opening Soon",  "Closing Soon", "Open 24 hours", "  ");

      $times = $times = array(
        1 => array('day' => 'Monday', 'open' => date( $row_DetailRS1['monO'] ), 'close' => date( $row_DetailRS1['monC'] )),
        2 => array('day' => 'Tuesday', 'open' => date( $row_DetailRS1['tueO'] ), 'close' => date( $row_DetailRS1['tueC'] )),
        3 => array('day' => 'Wednesday', 'open' => date( $row_DetailRS1['wedO'] ), 'close' => date( $row_DetailRS1['wedC']) ),
        4 => array('day' => 'Thursday', 'open' => date( $row_DetailRS1['thurO'] ), 'close' => date( $row_DetailRS1['thurC']) ),
        5 => array('day' => 'Friday', 'open' => date( $row_DetailRS1['friO'] ), 'close' => date( $row_DetailRS1['friC'] )),
        6 => array('day' => 'Saturday', 'open' => date( $row_DetailRS1['satO'] ), 'close' => date( $row_DetailRS1['satC']) ),
        7 => array('day' => 'Sunday', 'open' => date( $row_DetailRS1['sunO'] ), 'close' => date( $row_DetailRS1['sunC'] )) );



      $html .= "  <a href=''>"; echo $curDay; $html .="</a>

                   <table class='table table-striped'  border='0' align='center' cellpadding='10' cellspacing='20'>
                   <tr>
                     <td>Days</td>
                     <td><span class='white-text' style='margin-right: 3em;'></td> 
                     <td>Business Hours</td> 
                     <td><span class='white-text' style='margin-right: 3em;'></td>
                     <td>Hours</td>
                    </tr>";
      $i = 1;



    $cd = $datetime->format('N'); 

    $timenow =     date("H:i:s", time());


    // Create an array of day numbers that start with current day and loops around
    $day_order = array_merge(range($cd, 7), range(1, $cd-1));



     foreach ($day_order as $daynum): {
        $oc = $times[$daynum];
        $openingTime = $oc['open'];
        $closingTime = $oc['close'];
        $openingSoon = date('H:i:sA', strtotime($openingTime)-3600);
        $closingSoon = date('H:i:sA', strtotime($closingTime)-3600);
        if ($cd == $daynum) {
            if ($openingTime == ' ' && $closingTime == ' ') {
                $s = $status[4];
            }
            elseif ($timenow < $openingSoon || $timenow > $closingTime ) {
                $s = $status[1];
            }
            elseif  ($timenow > $openingSoon && $timenow < $openingTime ) {
                $s = $status[2];
            }
            elseif  ($timenow > $closingSoon && $timenow < $closingTime ) {
                $s = $status[3];
            } else {
                $s = $status[0];
            }
        } else {
            $s = " ";
        }

        $html .= "<tr>";
        $html .= "<td>". $oc['day']."</td>";
        $html .= "<td>  <span class='white-text' style='margin-right: 3em;'> </td>";
        $html .= "<td>".$openingTime." to ".$closingTime."</td>";
        $html .= "<td>  <span class='white-text' style='margin-right: 3em;'> </td>";
        $html .= "<td>".$s."</td>";
        $html .= "</tr>";

    }
          $datetime->add(new \DateInterval('P1D'));








      endforeach;
      $html .= "</table>";
      echo $html;



     ?>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-05 13:58:14

代码语言:javascript
复制
$day_order = array_merge(range($cd, 7), range(1, $cd-1));

如果你在$cd == 1的时候使用var_dump命令,你会得到

代码语言:javascript
复制
[1,2,3,4,5,6,7,1,0];

您需要做的是:

代码语言:javascript
复制
$day_order = range($cd, 7);
if ($cd != 1) {
    $day_order = array_merge($day_order, range(1, $cd-1));
}
票数 2
EN

Stack Overflow用户

发布于 2016-09-05 14:00:17

我认为错误在于您定义foreach范围的这一行:

代码语言:javascript
复制
$day_order = array_merge(range($cd, 7), range(1, $cd-1));

它必须是:

代码语言:javascript
复制
if ($cd != 1) {
    $day_order = array_merge(range($cd, 7), range(1, $cd-1));
} else {
    $day_order = range($cd, 7));
}

原因是因为当range(1,0)是"1,0“时,当使用$cd == 1时,它会向数字范围添加一个"0”。您必须通过检查$cd == 1是否可以截获此添加。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39324428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档