2013-07-29 2 views
0

에 키에 의해 혼합 배열 및 개체 정렬 :내가이처럼 보이는 객체/배열을 PHP

$methods = 
    Array 
    (
     [0] => stdClass Object 
      (
       [total] => 5.32 
      ) 

     [1] => stdClass Object 
      (
       [total] => 14.16 
      ) 

     [2] => stdClass Object 
      (
       [total] => 2.89 
      ) 

    ) 

내가이 CMP와에 usort 시도했습니다 total으로 오름차순으로 모든 일을 정렬 할 함수 및 uasort,하지만 그것을 작동시키지 않을 수 있습니다, 하나의 함수는 그것이 다른 배열은 불평하는 동안 그것은 개체라고 불평.

+2

질문 ** ** 문제에 대한 최소한의 이해가 해결되는 것을 보여 주어야합니다. 시도한 해결책, 왜 실패했는지, 예상 * 결과를 포함하십시오. 참고 항목 : [스택 오버플로 질문 체크리스트] (http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist) –

+0

'나는 cmp 함수로 usort를 시도했습니다 .' 당신이 시도한 것을 보여줄 수 있습니까? –

답변

3

당신은 별도로 함수를 정의하는 문자열로에 통과해야이

usort($methods, function($a, $b) { return $a->total - $b->total; }); 

전 PHP 5.3을 달성하기 위해 PHP 5.3로 폐쇄와에 usort 사용할 수 있습니다. 코드를 요청

if(!function_exists("totalSorter")){ 
    function totalSorter($a, $b){ 
    return $a->total - $b->total; 
    } 
} 
usort($methods, "totalSorter"); 
+0

+1 아이 라이너> oneliner> all. – moonwave99

+1

오류가 발생했습니다 : 경고 : usort() [function.usort] : 인수는 배열이어야합니다. – Talon

+0

첫 번째 인수는 배열이어야합니다. [here] (http://php.net/manual/)를 참조하십시오. en/function.usort.php). – Orangepill

1
<?php 
//Initializing everything. 
$obj1 = new stdClass(); 
$obj1->total = 5.32; 

$obj2 = new stdClass(); 
$obj2->total = 14.16; 

$obj3 = new stdClass(); 
$obj3->total = 2.89; 

$methods = [$obj1, $obj2, $obj3]; 
//Make sure everything is setup correctly. 
var_dump($methods); 

//Magic 
usort($methods, function($a, $b) { 
    if ($a === $b) { 
     return 0; 
    } 
    return $a > $b ? 1 : -1; 
}); 

//Ta-da~ 
var_dump($methods); 
관련 문제