2011-11-24 2 views
0

내가 예를 들어다차원 배열 두 날짜

array(
    "hgfh" => array("s" => "2011-11-28T07:00-04:00", "e" => "2011-11-29T06:59-04:00"), 
    "hgfh" => array("s" => "2011-11-29T07:00-04:00", "e" => "2011-11-30T06:59-04:00"), 
    "hgfh" => array("s" => "2011-11-30T07:00-04:00", "e" => "2011-12-01T06:59-04:00"), 
    "hgfh" => array("s" => "2011-12-01T07:00-04:00", "e" => "2011-12-02T06:59-04:00"), 
    "hgf"  => array("s" => "2011-12-02T07:00-04:00", "e" => "2011-12-05T06:59-04:00"), 
    "sog"  => array("s" => "2011-12-05T07:00-04:00", "e" => "2011-12-06T06:59-04:00"), 
    "gfd"  => array("s" => "2011-12-06T07:00-04:00", "e" => "2011-12-07T06:59-04:00"), 
    "gfd"  => array("s" => "2011-12-07T07:00-04:00", "e" => "2011-12-08T06:59-04:00"), 
    "bob" => array("s" => "2011-12-08T07:00-04:00", "e" => "2011-12-09T06:59-04:00"), 
    "tree" => array("s" => "2011-12-09T07:00-04:00", "e" => "2011-12-11T23:00-04:00"), 
); 

아래와 같은 배열이의 중간에 발견하고 내가 얻을 다음 현재 date("c"); 그 배열의 "s""e" 사이에 있는지 확인하고 필요 키. 따라서 오늘은 2011-11-30T09:50-04:00이고 키가 hgfh 인 것으로 판단됩니다. 그렇게 할 수있는 빠르고 쉬운 방법이 있습니까? 성능에 대해 조금 걱정이됩니다. 따라서 성능이 현저하게 향상 될 수있는 방법이 있다면 감사하게 생각합니다.

+0

당신은 동일한 색인'hgfh'를 4 번 가지고 있는데, 그것은 나쁜 복사 및 붙여 넣기입니까? –

+0

가비지 데이터 롤입니다. – Steven

답변

2

날짜를 문자열로 저장하면 특히 '사이'비교를 원할 때 무엇을하든 고통 스러울 것입니다. 해당 시간을 나타내는 원시 PHP 타임 스탬프 값을 저장해야합니다 (예 :

array(
    'hgfh' => array('s' => 1000, 'e' => 2000) 
    etc... 
) 

(분명히 가짜 타임 스탬프 값 사용). 그렇지 않으면 시간 값에 그 문자열이 매우 빠르고 비싼 도착 체크 루프를 실행할 때마다 변환 붙어있어

$check = strtotime('2011-11-30T09:50-04:00'); 
foreach($yourarray as $key => $times) { 
    if (($check >= $times[s]) && ($check <= $times[e])) 
     break; 
    } 
} 
echo $key; 

: 그 다음은 간단한 문제가된다. 항상 네이티브 형식으로 시간/날짜를 저장하고 필요에 따라 사람이 읽을 수있는 형식으로 변환하십시오.

0
function get_matches($date_array) { 

     $new_date_array = array_filter($date_array, 'match_dates'); 

     print_r(array_keys($new_date_array)); 

    } 

    function match_dates($array_element) { 

     return date('c') >= $array_element['s'] && date('c') <= $array_element['e'] ? true : false; 

    } 
0

"오늘날은 2011-11-30T09 말할 것입니다 그래서 : 00 : 50-04"질문에서이 줄은 달력 날짜 및 지역화 된 타임 스탬프를 사용하려는 시도가 있음을 시사

교환 가능하게.

이것은 달력 날짜와 순수 시간 스탬프 사이를 전환하는 것보다 낫지 만 여전히 모호합니다.

캘린더 날짜와 관련된 경우 캘린더 날짜와 같은 날짜로 저장하십시오. 2011-11-24

성능 문제가있는 경우 해당 달력 날짜를 예를 들어 다음과 같이 저장할 수 있습니다. 수정 된 율리우스 력 날짜.

시간 소인은 절대 시간을 나타내며 대개 초입니다.

지역화 된 시간 소인은 절대 시간 (일반적으로 초 단위)과 유효 시간대 오프셋 (일반적으로 시간 또는 분)의 조합을 나타냅니다.

달력 날짜는 달력 날짜를 나타냅니다. 달력 날짜는 특정 장소의 관할권이 정의한 시간 스탬프에 따라 시작되고 끝나는 달력 날짜를 나타냅니다.

ISO-8601 문자열 표현이든 숫자 표현이든 관계없이 항상 의도에 대해 명확하게주의하십시오.

언뜻보기에는 시간이 쉽습니다.

하지만 실제로는 시간이 잘못되었을 때 가장 쉬운 방법 중 하나 일뿐입니다.