2012-02-18 6 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; 
} 

** 편집 : *

죄송 사람은, 코드가 실제로 작동, 내가 대신 줌라 문제에서 실행됩니다.

줌라를 사용하며,이 같은 오류가 발생하는 사람들을위한 솔루션입니다 :

  • 사이트의 루트을 configuration.php로 진행

는 ini_set ('}'후) COMAND

  • 삽입 마지막 행 ('pcre.backtrack_limit', -1);

    덕분에 많은

  • +0

    글쎄, 어떨까요? 어느 시점에서 실패합니까? –

    +0

    해당 코드에 아무런 문제가 보이지 않으며 문제없이 로컬로 실행했습니다. 스크립트에 다른 PHP 코드가 없습니까? – Optimist

    +0

    [내가 PHP에서 2 개의 날짜를 가질 수 있습니다. foreach 루프를 실행하여 그 모든 요일을 통과시키는 방법은 무엇입니까?] (http://stackoverflow.com/questions/3207749/i-have-2-dates-in -php-how-can-i-run-a-foreach-loop-to-go-through-all-of-those-d) – Gordon

    답변

    0

    잘못된 라인은이 : $data = $mes; 당신은 루프 동안 전에 먼저 넣어해야합니다.

    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");