2011-09-26 4 views
0

단순히이 패턴을 영원히 반복하는 문자 패턴이 있습니다. 캘린더에이 패턴을 적용하는 쉬운 방법이 있습니까? A로부터 시작하여 (즉 aswell 후 년이, 그리고 가능한 경우)캘린더에 패턴 적용하기

예를 들어, 실제 패턴 자체가 그때이 패턴을 올해의 나머지 부분에 대한 적용하려는 E1, E, E, E, O, O, N1, N1, N, O, O, O, L, L1, L1, L, O, O, E, E, E1, O, O, N, N, N, N, O, O, O, L, L, L, O, O, E1, E, E, E, O, O

입니다 2012 년 2 월 25 일 제 경우에 주어진 날짜를 말합니다.

PHP를 사용하여 수동으로 수행하지 않고이 문제를 해결하는 방법에 대해 생각해 봤지만 걸릴 단계는 생각할 수 없습니다. 그것이 date() 기능을 광범위하게 사용할 것이라고 생각할 수 있습니다!

모두 제쳐두고, 나는이 값들을 배열에 넣는 것이 좋은 첫 단계 일 수 있으며 그 구조를 루프의 기초로 사용할 수있을 것이라고 생각합니까?

이상적인 출력은 단순히 다음과 같습니다이 삭제 된 이유

dd/mm/yyyy : one of E1/E/O/N1/N

+0

좋은 농담. –

+0

하루에 하나입니까? – hakre

답변

1

확실하지, 그것은 거의 정확했다. 내가 추가 한 것은 이전 답변의 while 루프입니다. 원래의 포스터에 대한 모든 크레딧. PHP에서

<?php 
$str = "E1, E, E, E, O, O, N1, N1, N, O, O, O, L, L1, L1, L, O, O, E, E, E1, O, O, N, N, N, N, O, O, O, L, L, L, O, O"; 
$now = strtotime('25th Feb 2012'); // Now in unix-timestamp (seconds since epoch) 
$end = strtotime('2013-02-25'); 
while ($now <= $end) 
{ 
    foreach (explode(', ', $str) as $val) { // Loop through each value 
     print date("d/m/Y", $now) . " : {$val}<br />\n"; // Format output 
     $now += 86400; // Add 1 day to $now (86400 seconds) 
     if ($now >= $end) break; // Close after $end date 
    } 
} 
?> 
+0

감사합니다.이 답변은 제가 찾고있는 것에 가장 가깝습니다. – martincarlin87

1

그것은 매우 쉽게 당신은 다음과 같은 기능을 사용할 수있는 Julian Date N

$str = explode(', ',"E1, E, E, E, O, O, N1, N1, N, O, O, O, L, L1, L1, L, O, O, E, E, E1, O, O, N, N, N, N, O, O, O, L, L, L, O, O"); 
$now = GregorianToJD(date('m'),date('j'),date('Y')); 
$start = GregorianToJD(1,13,1993); // Start January 13th 1993 
$days = $now-$start; //get total days 
$tod = $str[($days % count($str)) - 1]; //Total days mod amount of options -1 gets you the key to the currect code. 
echo "today is $tod"; 
+0

감사합니다. 훌륭한 답변이었습니다. – martincarlin87

1

을 사용하고 :

<?php 
    function valueFor($check_date){ 
     //the data reference 
     $data = "E1, E, E, E, O, O, N1, N1, N, O, O, O, L, L1, L1, L, O, O, E, E, E1, O, O, N, N, N, N, O, O, O, L, L, L, O, O"; 
     $data_ary = explode(',',str_replace(' ','',$data)); 
     $start_stamp = strtotime("2012-02-25"); 
     $check_stamp = strtotime($check_date); 
     //get difference of days for both dates 
     $days_diff = floor(($check_stamp - $start_stamp)/(60*60*24)); 
     if($days_diff > count($data_ary)) $days_diff = ($days_diff % count($data_ary)) - 1; 
     return $data_ary[$days_diff]; 
    } 

    //=> this will output 'E1' 
    echo valueFor('2012-04-01'); 
?> 

그래서 당신은 단순히 날짜를 통과하는 함수를 호출합니다.

+0

큰 답변 주셔서 감사합니다. – martincarlin87

관련 문제