2014-03-15 4 views
0

배열에서 두 가지 기준으로 정렬하고 싶습니다. 첫 번째 기준은 두 번째 범주 및 제목입니다.여러 기준에 따라 배열을 정렬하는 방법은 무엇입니까?

usort()를 사용해 보았지만 작동하지 않습니다.

이 작업을 수행하는 PHP 함수가 있습니까?

내 원래 배열 :

Array 
(
    [0] => stdClass Object 
    (
     [id] => 1 
     [category] => cat1 
     [title] => title1 
    ) 
[1] => stdClass Object 
    (
     [id] => 3 
     [category] => cat2 
     [title] => z 
    )  
[2] => stdClass Object 
    (
     [id] => 2 
     [category] => cat1 
     [title] => title2 
    ) 
[3] => stdClass Object 
    (
     [id] => 4 
     [category] => cat2 
     [title] => a 
    ) 
) 

나는이를 좋아하는 것 :

Array 
(
    [0] => stdClass Object 
    (
     [id] => 1 
     [category] => cat1 
     [title] => title1 
    ) 
[1] => stdClass Object 
    (
     [id] => 2 
     [category] => cat1 
     [title] => title2 
    )  
[2] => stdClass Object 
    (
     [id] => 4 
     [category] => cat2 
     [title] => a 
    ) 
[3] => stdClass Object 
    (
     [id] => 3 
     [category] => cat2 
     [title] => z 
    )    
) 

감사합니다. 내가 방법을 발견하기 때문에 많이 시도하지 않은

:

usort($object, 'sort'); 
function sort($a,$b){ 
if($a->category == $b->category){ 
    if($a->title == $b->title){ 
     return 0; 
    }else{ 
     return ($a->title < $b->title) ? -1 : 1; 
    } 
}else{ 
    return ($a->category < $b->category) ? -1 : 1; 
} 
} 

그러나 그것은 또한() multisort와 함께 작동 :

foreach ($object as $sort_key => $sort_row) { 
    $category[$sort_key] = $sort_row->acls_category; 
    $title[$sort_key] = $sort_row->acls_title; 
} 
array_multisort($category, SORT_ASC, $title, SORT_ASC, $object); 
+0

이 HTTP를 사용해보십시오 : //nl1.php합니다. net/array_multisort –

+1

'usort()'와 어떤 비교 함수를 사용 했습니까? – Lukas

답변

1
$o1 = new stdClass; 
$o1->id = 1; 
$o1->category = 'cat1'; 
$o1->title = 'title1'; 

$o2 = new stdClass; 
$o2->id = 3; 
$o2->category = 'cat2'; 
$o2->title = 'z'; 

$o3 = new stdClass; 
$o3->id = 2; 
$o3->category = 'cat1'; 
$o3->title = 'title2'; 

$o4 = new stdClass; 
$o4->id = 4; 
$o4->category = 'cat2'; 
$o4->title = 'a'; 

$arr = array($o1, $o2, $o3, $o4); 

usort($arr, function($a, $b) { 
    $catCmp = strcmp($a->category, $b->category); 

    if ($catCmp) { 
     return $catCmp; 
    } 

    return strcmp($a->title, $b->title); 
}); 

var_dump($arr); 
+0

감사의 말씀을드립니다. 나는 내가 충분히 탐색하지 않았기 때문에 내가 어떻게 가는지 보완하기 위해 보충 물을 덧붙였다. – user3185306

관련 문제