php 日曆系統中添加foreach迴圈!

发布于 2022-09-06 23:39:59 字数 7471 浏览 13 评论 0

這是一個php完整的日曆系統

class Calendar {
            public function __construct(){
              $this->naviHref = htmlentities($_SERVER['PHP_SELF']);
            }
            /********************* PROPERTY ********************/
            private $dayLabels = array("一","二","三","四","五","六","日");
            private $currentYear=0;
            private $currentMonth=0;
            private $currentDay=0;
            private $currentDate=null;
            private $daysInMonth=0;
            private $naviHref= null;
            /********************* PUBLIC **********************/
            public function show() {
              @$year  == null;
              @$month == null;
              if(null==@$year&&isset($_GET['year'])){
                @$year = $_GET['year'];
              }else if(null==@$year){
                @$year = date("Y",time());
              }
              if(null==@$month&&isset($_GET['month'])){
                $month = $_GET['month'];
              }else if(null==@$month){
                $month = date("m",time());
              }
              $this->currentYear=$year;
              $this->currentMonth=$month;
              $this->daysInMonth=$this->_daysInMonth($month,$year);
              $content='<div id="calendar">'.
                '<div class="box">'.
                $this->_createNavi().
                '</div>'.
                '<div class="box-content">'.
                  '<ul class="label">'.$this->_createLabels().'</ul>';
                  $content.='<div class="clear"></div>';
                  $content.='<ul class="dates">';

                  $weeksInMonth = $this->_weeksInMonth($month,$year);
                  // Create weeks in a month
                  for( $i=0; $i<$weeksInMonth; $i++ ){

                    //Create days in a week
                    for($j=1;$j<=7;$j++){
                      $content.=$this->_showDay($i*7+$j);
                    }
                  }
                  $content.='</ul>';
                  $content.='<div class="clear"></div>';
                $content.='</div>';
              $content.='</div>';
              return $content;
            }

            /********************* PRIVATE **********************/

            private function _showDay($cellNumber){
              if($this->currentDay==0){
                $firstDayOfTheWeek = date('N',strtotime($this->currentYear.'-'.$this->currentMonth.'-01'));
                if(intval($cellNumber) == intval($firstDayOfTheWeek)){
                  $this->currentDay=1;
                }
              }

              if(($this->currentDay!=0)&&($this->currentDay<=$this->daysInMonth)){
                  $this->currentDate = date('Y-m-d',strtotime($this->currentYear.'-'.$this->currentMonth.'-'.($this->currentDay)));
                  $cellContent = $this->currentDay;
                  $this->currentDay++;
              }else{
                  $this->currentDate =null;
                  $cellContent=null;
              }

              return '
              <li id="li-'.$this->currentDate.'" class="'.($this->currentDate==date("Y-m-d")?'today':'').' relative '.($cellNumber%7==1?' start ':($cellNumber%7==0?' end ':' ')).
                ($cellContent==null?'mask':'').'">'.($cellContent==null?'':'
                <span class="cellContent">'.$cellContent.'</span>

                <div class="avatar_review_layout">
                  <span data-today="'.$cellContent.'" data-date="'.$this->currentDate.'"
                  class="pointer relative addicon add_'.$this->currentDate.'"><span class="plus">+</span></span>
                </div>
              ').'</li>';
            }

            private function _createNavi(){
              $nextMonth = $this->currentMonth==12?1:intval($this->currentMonth)+1;
              $nextYear = $this->currentMonth==12?intval($this->currentYear)+1:$this->currentYear;
              $preMonth = $this->currentMonth==1?12:intval($this->currentMonth)-1;
              $preYear = $this->currentMonth==1?intval($this->currentYear)-1:$this->currentYear;

              return
                '<div class="header">'.
                  '<a class="prev" href="'.$this->naviHref.'?month='.sprintf('%02d',$preMonth).'&year='.$preYear.'">← '.$preMonth.' 月</a>'.
                      '<span class="title">'.date('Y 年 n 月',strtotime($this->currentYear.'-'.$this->currentMonth.'-1')).'</span>'.
                  '<a class="next" href="'.$this->naviHref.'?month='.sprintf("%02d", $nextMonth).'&year='.$nextYear.'">'.$nextMonth.' 月 →</a>'.
                '</div>';
            }

            private function _createLabels(){
              $content='';
              foreach($this->dayLabels as $index=>$label){
                $content.='<li class="'.($label==6?'end title':'start title').' title">'.$label.'</li>';
              }
              return $content;
            }

            private function _weeksInMonth($month=null,$year=null){
              if( null==($year) ) {
                $year =  date("Y",time());
              }
              if(null==($month)) {
                $month = date("m",time());
              }
              // find number of days in this month
              $daysInMonths = $this->_daysInMonth($month,$year);
              $numOfweeks = ($daysInMonths%7==0?0:1) + intval($daysInMonths/7);
              $monthEndingDay= date('N',strtotime($year.'-'.$month.'-'.$daysInMonths));
              $monthStartDay = date('N',strtotime($year.'-'.$month.'-01'));
              if($monthEndingDay<$monthStartDay){
                $numOfweeks++;
              }
              return $numOfweeks;
            }

            private function _daysInMonth($month=null,$year=null){
              if(null==($year))
                $year =  date("Y",time());
              if(null==($month))
                $month = date("m",time());
              return date('t',strtotime($year.'-'.$month.'-01'));
            }
        }

        $calendar = new Calendar();
        echo $calendar->show();

其中有一段return是:

return '
              <li id="li-'.$this->currentDate.'" class="'.($this->currentDate==date("Y-m-d")?'today':'').' relative '.($cellNumber%7==1?' start ':($cellNumber%7==0?' end ':' ')).
                ($cellContent==null?'mask':'').'">'.($cellContent==null?'':'
                <span class="cellContent">'.$cellContent.'</span>

                <div class="avatar_review_layout">
                  <span data-today="'.$cellContent.'" data-date="'.$this->currentDate.'"
                  class="pointer relative addicon add_'.$this->currentDate.'"><span class="plus">+</span></span>
                  // 讓迴圈能夠在這裡運作
                </div>
              ').'</li>';

我想將

foreach($driver_shift_get_all->{'driver-shifts'} as $value):
  echo "<br>".$value->date."<br>";
  print_r($value->{'drivers-available'});
endforeach;

加入到這個return
但無法加入.....會有各種問題
請問這能怎麼解?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

长伴 2022-09-13 23:39:59

可以把foreach放在return之前呀

比如简单把foreach改成赋值操作:

foreach($driver_shift_get_all->{'driver-shifts'} as $value) {
    $driver_shift_list .= "<br>".$value->date."<br>";
    $driver_shift_list .= $value->{'drivers-available'};
}

拿到你的foreach之后的值在进行相关操作。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文