2009-03-24 6 views
0

여기에 아주 구체적인 문제가 있습니다. 나는 다차원 배열을 갖고 있는데, 첫 번째는 30 분 간격으로, 두 번째는 날짜별로 정렬하고 싶다. 함수 array_multisort은 내 요구 사항을 충족하지 않습니다.PHP : 30 분 간격으로 배열 정렬

예 : 내가 원하는 : 나는 내 자신의 정렬 콜백 함수와 함께 uksort으로 이러한 목표를 달성하기 위해 노력했습니다

array(array("time"=>"11:30", 
      "date"=>"2009-03-24"), 
     array("time"=>"12:10", 
      "date"=>"2009-03-23"), 
     array("time"=>"12:00", 
      "date"=>"2009-03-24"), 
     array("time"=>"12:15", 
      "date"=>"2009-03-24")); 

:

array(array("time"=>"12:15", 
      "date"=>"2009-03-24"), 
     array("time"=>"12:10", 
      "date"=>"2009-03-23"), 
     array("time"=>"12:00", 
      "date"=>"2009-03-24"), 
     array("time"=>"11:30", 
      "date"=>"2009-03-24")); 

는 다음과 같이 결국. 이것은 내가 현재 사용하고있는 코드입니다 :

uksort($myArray, "sortThirties"); 

function sortThirties($a, $b) 
{ 
    //Get the two times as timestamps relative to today 
    $one = strtotime($a['time']); 
    $two = strtotime($b['time']); 

    //Round them down to the nearest half-hour time 
    $one = $one - ($one % 1800); 
    $two = $two - ($two % 1800); 

    //Return the difference if times are unequal 
    //If times are equal, return the difference between dates. 
    return ($one == $two ? strcmp($a['date'],$b['date']) : $one - $two); 
} 

즉시이 기능을 실행 한 후, 나는 인 print_r (와 배열을 인쇄), 데이터의 순서는 무작위로 나타납니다. 내가 뭘 놓치고 있니?

편집 : 그것은 순서 임의완전히입니다 밝혀졌습니다. 나는 sortThirties 함수에이 줄을 추가 :

echo "<BR>",$a['time']," ",$b['time']; 

을 내가 가진 모든 <BR> 년대의 50 페이지이었다.

나는 바로 그 배열에서 실행이 코드는 나에게 정렬되지 않은 데이터를 제공하기 때문에 배열이 올바르게 구성되어 알고 : 내가 생각할 수있는

foreach($myArray AS $a) 
{ 
    echo "<BR>",$a['date']," ",$a['time']; 
} 

유일한 것은 uksort에 문제가있을 수 있어야합니다. 이견있는 사람?

답변

2

는 PHP 버전에서 변경 한 것으로 나타났습니다 직접 :

$to_sort = array( 
        0 => array("time"=>"12:15", "date"=>"2009-03-24"), 
        1 => array("time"=>"12:10", "date"=>"2009-03-23"), 
        2 => array("time"=>"12:00", "date"=>"2009-03-24"), 
        3 => array("time"=>"11:30", "date"=>"2009-03-24") 
       ); 

차이점을 확인하십시오. :)

+0

Yeesh ... 인터넷에있는 모든 사람들에게 왜 내가 바보인지 물어 보았습니까? 친절 해줘서 고마워. 어제 그 이유를 알 수없는 이유를 모르겠습니다. 웬일인지, 나는 PHP 문서의 예를 보았고 값 ("지구", "사과"등)을 값으로 보았다. –

+0

걱정하지 마십시오. 때로는 이와 비슷한 것을 놓치기도합니다.이 사이트가 유용 할 때가 있습니다. 내가 도울 수있어서 기쁩니다 :). – Adi

2

매우 이상합니다. 방금 제공 한 것과 비슷한 배열에서 코드를 시험해 보았습니다. 가능성 :

  • 배열 시간/날짜 중 하나에 공백이 있습니까?
  • PHP 버전 차이점은 무엇입니까? 나는 한 strtotime()의 반환 값은 에 usort 종류의 값으로 배열하고 배열을 정렬 할 동안 uksort 기능 키에 의해 배열을 정렬 5.1.0
+0

일부 PHP 버전에서는 날짜가 strtotime으로 전달되어야합니다. 이것은 그의 문제 일 수 있습니다. – gradbot

+0

정렬 코드가 실행되는 동일한 시스템에서이 테스트를 거쳤습니다. strtotime ("15:30")은 오늘 오후 3시 30 분에 유닉스 타임 스탬프를 반환합니다. –

관련 문제