2012-02-18 111 views
-1

我想构建一个简单的日历,并获得嵌套whiles的输出,但它似乎不工作,我得到一个“PHP限制已达到”错误。在“我自己的逻辑”中,我看不出有什么不对,嘿嘿。有人可以指出我的错误在哪里吗?通过几个月和几年的几天的PHP循环

//Starting month 
$mes = '2012-01-01'; 
//Counter months 
$m = 1; 
//LOOP month 
while($m <= 12){ 
    //Variables days 
    $data = $mes; 
    //Counter days 
    $x = 1; 
    //LOOP days 
    while($x <= 31){ 
    echo "$data"; 
    //adding one day 
    $data = strtotime("$data + 1 days"); 
    $data = date("Y-m-d",$data); 
    ++$x; 
    } 
    //adding one month 
    $mes = strtotime("$mes + 1 month"); 
    $mes = date("Y-m-d",$mes); 
    ++$m; 
} 

** * ** * *** 编辑: *

对不起球员,代码实际工作,我在一个Joomla的问题,而不是运行。

对谁使用Joomla和得到同样的错误的解决方法是:

  • 进入您的网站根的configuration.php;
  • 插入最后一行(后 '}')的COMAND

的ini_set( 'pcre.backtrack_limit',-1);

非常感谢

+0

那么,什么*去*错?它在哪一点失败? – 2012-02-18 10:58:23

+0

我没有看到该代码的任何问题,我甚至在本地运行它没有任何问题。你确定你没有脚本中的其他PHP代码? – Optimist 2012-02-18 11:04:10

+0

可能重复[我在PHP中有两个日期,我如何运行一个foreach循环来经历所有这些日子?](http://stackoverflow.com/questions/3207749/i-have-2-dates-in -php-how-can-i-run-a-foreach-loop-to-go-through-all-of-that-d) – Gordon 2012-02-18 11:08:23

回答

0

错线是:$data = $mes;,你应该把它之前,首先while循环。

0

基本日历(天环):

$start = strtotime("01/01/2010"); 
$i_max = (date("L",$start)?366:365)-1; 

for($i = 0;$i <= $i_max;$i++) 
    $calendar 
     [strftime("%B",$loop = strtotime("+$i day",$start))] 
     [strftime("%V",$loop)] 
     [strftime("%a",$loop)] = strftime("%e",$loop); 

print_r($calendar); 

高级,这是便于打印,并显示在月日重叠:

$calendar_year = 2010; 
$start = strtotime("01-01-$calendar_year"); 
if(strftime("%u",$start) != "1") 
    $start = strtotime("last Monday",$start); 

$end = strtotime("31-12-$calendar_year"); 
if(strftime("%u",$end) != "7") 
    $end = strtotime("next Sunday",$end); 


$loop = $start; 
$d_names = $m_names= array(); 
while($loop<=$end) 
{ 
    $data = explode(",",strftime("%d,%u,%V,%m,%Y,%a,%B",$loop)); 
    list($d,$d_nr,$w,$m,$y,$d_name,$m_name) = $data; 
    $m = (int)$m; 
    $w = (int)$w; 
    $d = (int)$d; 

    if(!isset($d_names[$d_nr]))$d_names[$d_nr] = $d_name; 
    if(!isset($m_names[$m]))$m_names[$m] = $m_name; 

    if($y!=$calendar_year) 
     $m = $m==12?0:13; 

    $calendar[$m][$w][$d_nr] = array($d,true); 

    $loop = strtotime("+1 day",$loop); 
} 
for($m = 1;$m<=13;$m++) 
    foreach($calendar[$m] as $w =>&$days) 
     if(count($days)<7) 
     { 
      for($i = 1; $i<=7;$i++) 
       if(!isset($days[$i])) 
        $days[$i] = isset($calendar[$m-1][$w][$i])? 
         array($calendar[$m-1][$w][$i][0],false): 
         array($calendar[$m+1][$w][$i][0],false); 
      ksort($days);    
     } 
unset($calendar[0],$calendar[13]); 

echo "<table>"; 
echo "<tr><th COLSPAN=8>$calendar_year</th></tr>"; 
foreach($calendar as $month => $weeks) 
{ 
    echo "<tr><th COLSPAN=8>$m_names[$month]</th></tr>"; 
    $first_week = true; 
    foreach($weeks as $week => $days) 
    { 
     if($first_week) 
     { 
      echo "<tr><th></th>"; 
      foreach($days as $day_nr => $day_data) 
       echo "<th>$d_names[$day_nr]</th>"; 
      echo "</tr>"; 

      $first_week = false; 
     } 
     echo "<tr><th>$week</th>"; 
     foreach($days as $day_nr => $day_data) 
      echo "<td".($day_data[1]?"":" style='color:gray;'").">$day_data[0]</td>"; 
     echo "</tr>"; 
    } 
}   
echo "</table>"; 

两者都基于ISO8601标准,支持的langauge设置:

setlocale(LC_TIME,“en_EN.utf8”);

相关问题