2014-04-06 3 views
2

저는 학교 프로젝트를하고 있는데, start_timeend_time 개의 코스가있는 다차원 배열을 가지고 있습니다.어떻게 PHP에서 시간 값을 기준으로 다차원 배열을 정렬합니까?

나는 이미 배열을 일별로 정렬했지만 시간별로 배열을 정렬하려고합니다. 가장 낮은 start_time은 배열의 첫 번째 요소입니다.

이 내 배열이 순간에 방법이다 : 나는 그것을 할 수있는 미리 정의 된 기능이 있는지 궁금

Array ( 
     [0] => Array ( 
        [courseID] => comp345 
        [lectureID] => ss 
        [day] => monday 
        [stime] => 18:20 
        [etime] => 20:30 
        [term] => winter 
        [year] => 2014 
      ) 
     [1] => Array ( 
        [courseID] => comp275 
        [lectureID] => gg 
        [day] => monday 
        [stime] => 12:15 
        [etime] => 15:16 
        [term] => winter 
        [year] => 2014 
      ) 
) 

또는 내가이 작업을위한 새로운 특정 기능을 작성해야합니다.

나는이 같은 START_TIME의 값에 액세스 할 수 있습니다

foreach ($array as $element) 
{ 
    $start_time = (substr($element['stime'], 0, 5)); 
} 

이이 형식의 시간을 반환합니다 8시 20분

그것은 정상적인 숫자와 동일한 방식으로 작동 등 비교할 때 :

8시 20분 < 10시 15분 = 사실

8시 20분> 10시 15분 = 거짓

답변

3

PHP> = 5.5.0 :

array_multisort(array_map('strtotime', array_column($array, 'stime')), SORT_ASC, $array); 

PHP < 5.5.0 :

foreach ($array as $k => $v) { 
    $stime[$k] = strtotime($v['stime']); 
} 
array_multisort($stime, SORT_ASC, $array); 
+0

는 array_multisort (array_map (', strtotime으로'array_column ($ MondayArray, 'STIME')), SORT_ASC, $ MondayArray을); - 작품 - 고마워요, 5 분 후에 답을 수락하겠습니다. – Jimmy

0

은 배열과 종류가 타임 스탬프 mktime와 유닉스 타임 스탬프를 추가합니다. 유닉스 타임 스탬프는 1970 년 이래로 초 단위의 숫자이기 때문에 정수형이므로 정렬하기 쉽습니다.

이 부분을보세요. reference question about sorting in PHP

당신이로이 같은

Array ( 
    [0] => Array ([courseID] => comp345 [lectureID] => ss 
       [day] => monday 
       [stime] => 18:20 
       [etime] => 20:30 
       [term] => winter 
       [year] => 2014) 
    [1] => Array ([courseID] => comp275 [lectureID] => gg 
       [day] => monday [stime] => 12:15 
       [etime] => 15:16 [term] => winter 
       [year] => 2014)) 

뭔가를 수행해야합니다

Go through array, add 'unixtimestamp' = mktime($el['hour'], $el['minute'], 0, 0, 0, $el['year']) 

function sortByOrder($a, $b) { 
    return $a['unixtimestamp'] - $b['unixtimestamp']; 
} 

usort($myArray, 'sortByOrder'); 
관련 문제