2013-04-27 4 views
-1

다차원 배열을 위치 값 (1 또는 0 만 가능), 날짜 및 시간으로 정렬하려고합니다. position = 1 인 배열이 가장 먼저 있어야하며 날짜와 시간순으로 정렬해야합니다. 위치에 배열 = 0 위치 = 1 사람 후에 와야한다 또한 정렬 후 나는 배열이 원하는 방법 날짜와 시간PHP는 다차원 배열을 3 개의 값으로 정렬합니다.

Array 
(
[001] => Array 
    (
     [position] => 1 
     [Date] => 28.04.2013 
     [Time] => 00:21:38 
    ) 

[002] => Array 
    (
     [position] => 1 
     [Date] => 28.04.2013 
     [Time] => 00:27:07 
    ) 

[003] => Array 
    (
     [position] => 0 
     [Date] => 28.04.2013 
     [Time] => 00:15:06 
    ) 

[004] => Array 
    (
     [position] => 0 
     [Date] => 28.04.2013 
     [Time] => 00:26:09 
    ) 

)

그게 전부를 기준으로 정렬해야합니다

Array 
(
[002] => Array 
    (
     [position] => 1 
     [Date] => 28.04.2013 
     [Time] => 00:27:07 
    ) 

[001] => Array 
    (
     [position] => 1 
     [Date] => 28.04.2013 
     [Time] => 00:21:38 
    ) 

[004] => Array 
    (
     [position] => 0 
     [Date] => 28.04.2013 
     [Time] => 00:26:09 
    ) 

[003] => Array 
    (
     [position] => 0 
     [Date] => 28.04.2013 
     [Time] => 00:15:06 
    ) 

)

나는 몇 가지 기능을 시도했지만 한 일 권리 없음. position = 1 인 배열은 마지막 배열이거나 모든 배열은 날짜와 시간순으로 정렬됩니다. 나 혼자서 알아낼 수 없어. 미리 감사드립니다. 영어가 나쁘면 죄송합니다.

+2

가 SO에 질문이 변형 수백, 그리고 모든 솔루션은 usort''의 사용을 포함한다. 우리가 한 일을 보여줘. – Jon

답변

1

"사용자 - 정의 된 비교 함수를 사용하여 값에 의해 배열을 정렬 ..."데이터의 비교에 기초

$positions = $datetimes = array(); 

foreach($array as $k => $v) { 

    $positions[$k] = $v['position']; 
    $datetimes[$k] = strtotime($v['Date']. ' ' .$v['Time']); 

} 

array_multisort($positions, SORT_DESC, $datetimes, SORT_DESC, $array); 

그것을 먼저 DESC 위치로 정렬하고 나서 시간 (및 날짜 추정) DESC로 정렬하려면이 작업이 수행됩니다.

근무 예 : http://codepad.org/exc5Dhq8

+0

감사합니다! 그것은 잘 작동합니다 : – Kable

+0

array_multisort를 사용하는 경우 +1. 처음에는 당신이하고있는 일을 전혀 이해하지 못했습니다. 문서를 읽은 후 지금은 분명합니다. 나는 오늘 무언가를 배웠다. –

1

매개 변수로 배열과 비교 함수를 사용하는 함수 usort()을 살펴보십시오.

  • 비교 위치 위치가 동일한 경우

  • , 후 비교 날짜

  • 날짜가 동일한 경우, 다음 :

    은 배열 요소 두 가지를 비교할 수있는 comparaison 기능을 쓰기 시간을 비교하십시오

1

usort() - 원본 데이터 셋이 $array라는 배열 인

function your_func($a, $b) { 
    $pos = $b["position"] - $a["position"]; 
    if($pos) return $pos; 

    $date = strtotime($b["Date"]) - strtotime($a["Date"]); 
    if($date) return $date; 

    $time = strtotime($b["Time"]) - strtotime($a["Time"]); 
    return $time; 
} 
usort($arr, "your_func"); 
+1

위치가 1 인 배열이 제일 먼저 나와야합니다. 당신의 방법으로 정렬 될 때 0을 먼저 얻습니다. (문서에서 : 비교 함수는 첫 번째 인수가 각각 두 번째 인수보다 작거나 같거나 큰 것으로 간주되는 경우 0보다 작거나 같은 정수 또는 큰 정수를 반환해야합니다.). $ pos를 반환해야합니다. 주어진 날짜와 시간에 대해서도 마찬가지입니다. 예를 들어, 내림차순이 필요합니다. –

+0

u r 오른쪽 .. 방금 편집했습니다! – vlcekmi3

관련 문제