4

次のような配列があります。

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 値を持つ要素を取得して、配列の先頭に配置することができます。特定の KEY を一番上に置くことができますが、合計が最も高い人によって KEY が変わる場合があります。House名前の付いた人を常に配列の一番上に置くにはどうすればよいですか?

4

2 に答える 2

14

これはうまくいくはずです:

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 - マニュアル:

比較関数は、最初の引数がそれぞれ 2 番目の引数より小さい、等しい、または大きいと見なされる場合、0 より小さい、等しい、または大きい整数を返さなければなりません。

この場合、returnは、他のどの値よりも大きく、他のどの値よりも小さいこと1をソート関数に伝えます。House-1House

于 2013-01-18T19:25:27.380 に答える