2012-07-10 4 views
0

배열을 정렬하는 데 usort를 사용하고 있습니다. 보증 기간이 포함 된 배열이 있습니다. 그리고 그것을 정렬하는 정렬 함수. 그러나 내가 가지고있는 문제는 배열의 모든 항목에 보증이있는 것은 아닙니다. 배열을 정렬하고 싶지만 항상 날짜가없는 배열을 맨 아래에 배치해야합니다.아래에 값이없는 인덱스를 배치하는 값의 배열 배열

function warrantyA($a, $b){ 
    if($a->Warranty == "Available" and $b->Warranty == "Available"){ 
     $a = explode('/', $a->WarrantyDescription); 
     $b = explode('/', $b->WarrantyDescription); 

     $today = date("d-m-Y"); 

     $diffa = abs(strtotime($a[0]) - strtotime($today)); 
     $diffb = abs(strtotime($b[0]) - strtotime($today)); 

     $a = floor($diffa/86400/30); 
     $b = floor($diffb/86400/30); 
     return $a - $b; 
    } 
} 

위의 코드는 제가 지금 가지고있는 코드입니다. 원하는대로 작동하지 않습니다. 각 개체에는 보증 및 보증 설명이 있습니다. 보증이있는 경우 "Avaiable"이라고 표시됩니다.

코드는 보증 기간이 적용되며 오늘 날짜와 비교하여 보증 기간을 결정하고 해당 번호로 정렬하려고합니다.

아무런 보증이없는 항목이 배열의 맨 아래에 놓 이도록하려면 어떻게해야합니까?

답변

2

여기에 약간의 속임수가 있습니다. $a->Warranty=="Available"$b->Warranty == "Available"의 결과를 int (0 또는 1이 될 것입니다)로 변환 한 다음 가지고있는 것과 뺄셈을 수행하십시오. a가 보증을 가지고 b가 그렇지 않은 경우 1 - 0 또는 a가 더 큽니다. a가 b가 아니라면 -1을 반환하고 둘 다하지 않으면 0을 반환합니다.

$a_has = (int) $a->Warranty == "Available"; 
$b_has = (int) $b->Warranty == "Available"; 
if($a_has and $b_has){ 
    // keep your code here 
} 

return $a_has - $b_has; 
+0

Intresting. 나는 이것을 시험해보고 그것이 나에게 효과가 있는지 알려준다. 의견을 보내 주셔서 감사합니다! – Marc

+0

내림차순으로 정렬하면 좋습니다. 고맙습니다! 오름차순에 대한 트릭이 있습니까? 디스플레이 최단 보증 기간 중 가장 길게 오름차순으로 표시 한 후 아무 것도 표시하지 않으므로? 지금 일어나고있는 일은 보증없이 처음으로 표시하는 것입니다. – Marc

+0

마지막 표현식에서 두 용어를 바꿔서 결과의 반대쪽 끝으로 이동시켜야합니다. 그런 다음 보증을 포함한 분류를 모두 코드에 포함시킵니다. –

관련 문제