2013-01-18 2 views
1

나는이 비슷한 모양의 배열이 있습니다이동 배열 요소는 배열의 맨

Array 
(
    [0] => stdClass Object 
    (
     [Leasing] => 12939.74 
     [Name] => Jeremy 
     [Rental] => 0 
     [Sales] => 56603.13 
     [Total] => 69542.87 
    ) 
    [1] => stdClass Object 
    (
     [Leasing] => 0 
     [Name] => Shaun 
     [Rental] => 0 
     [Sales] => 58590 
     [Total] => 58590 
    ) 
    [2] => stdClass Object 
    (
     [Leasing] => 0 
     [Name] => Lindsay 
     [Rental] => 0 
     [Sales] => 22951.97 
     [Total] => 22951.97 
    ) 
    [3] => stdClass Object 
    (
     [Leasing] => 0 
     [Name] => Sally 
     [Rental] => 1200 
     [Sales] => 21624.9 
     [Total] => 22824.9 
    ) 
    [4] => stdClass Object 
    (
     [Leasing] => 0 
     [Name] => House 
     [Rental] => 0 
     [Sales] => 16235.81 
     [Total] => 16235.81 
    ) 
    [5] => stdClass Object 
    (
     [Leasing] => 5298.85 
     [Name] => Bill 
     [Rental] => 1200 
     [Sales] => 0 
     [Total] => 6498.85 
    ) 
) 

현재 배열이 총이를 사용하여 정렬됩니다 : 이제

usort($data, function ($a, $b) { 
    return $b->Total - $a->Total; 
}); 

을 , 배열의 맨 위에 [Name] => House 인 사람을 항상 가질 수 있어야합니다. 내 생각은 내가 그것을 Total에 의해 정렬 된 상태로 둘 수 있다는 것이고 (나는 여전히 그렇게 필요하기 때문에) 하우스 값으로 요소를 가져 와서 배열의 시작 부분에 놓는다. 나는 특정 키를 가져다가 맨 위에 놓을 수 있지만 키의 수가 가장 높은 키에 따라 키가 변경 될 수 있습니다. 배열의 맨 위에 항상 House이라는 사람을 넣을 수 있습니까?

+0

하나의 접근법 : 원하는 첫 번째 요소를 첫 번째 위치에 놓고 배열을 하나의 요소와 다른 모든 요소로 분할 한 다음 나머지 요소를 모두 정렬합니다. 죄송 합니다만, 나는 적절한 구문을 제공하기에 PHP 구문을 잘 기억하지 못합니다. – GreenMatt

+0

정렬 함수의 반환 값은 usort에 의해 정수로 캐스팅되므로 0.05와 0.95가 동일하게 표시됩니다. – Sammitch

답변

9

이 작동해야

usort($data, function ($a, $b) { 
    if ($a->Name != "House" && $b->Name == "House") { 
     return 1; 
    } elseif ($a->Name == "House" && $b->Name != "House") { 
     return -1; 
    } else { 
     return $b->Total - $a->Total; 
    } 
}); 

PHP: usort - Manual에서 :

비교 함수는 같거나 0보다 큰보다 작은 정수를 반환해야 첫번째 인수 각각 간주되면 보다 작음, 같음 또는 더 큰 것입니다. 이 경우

, 1를 돌려는 House 다른 값보다 크고, -1 House 그 이외의 값보다 작은 것을 선별 기능을 말한다.

+0

훌륭하게 작동합니다! 내가 물을 수 있다면 -1과 1은 어떤 의미가 있습니까? – mdance

+0

@ mdance 그냥 내 대답을 편집 – Tchoupi

+0

예를 들어, "집"을 하드 코딩하는 대신 변수를 주입하는 방법 대신 비교 함수를 매개 변수화하는 방법을 알고 싶습니다. –