2016-05-16 8 views
0

Ich rufe die Halo 5-API an, um insbesondere Waffen zu erhalten, die von jedem Spieler in Arena benutzt werden. Das Problem Ich bin mit, wenn ich diesen Anruf zu machen, gibt es 7 Waffen, die 0 Abschüsse von einem Spieler haben, wie folgt aus:Sortiere Laravel-Sammlung, wo das Objekt größer als 0 ist - Laravel 5.2

18 => array:3 [▼ 
    "WeaponId" => 2457457776.0 
    "TotalKills" => 0 
    "TotalHeadshots" => 0 
    ] 
    53 => array:3 [▼ 
    "WeaponId" => 2015271382 
    "TotalKills" => 0 
    "TotalHeadshots" => 0 
    ] 
    51 => array:3 [▶] 
    48 => array:3 [▶] 
    44 => array:3 [▶] 
    27 => array:3 [▶] 
    32 => array:3 [▶] 

Ich will diese 7 Waffen aus meiner Sammlung nehmen:

Dies ist, wie meine Sammlung eingerichtet ist:

public function getArenaWeaponKills($playerArenaWeaponStats) { 

     $results = collect($playerArenaWeaponStats->Results[0]->Result->ArenaStats->WeaponStats); 

     $array = $results->sortByDesc('TotalKills')->map(function($item, $key) { 
      return [ 
       'WeaponId' => $item->WeaponId->StockId, 
       'TotalKills' => $item->TotalKills, 
       'TotalHeadshots' => $item->TotalHeadshots, 
      ]; 
     }); 

     return $array; 
    } 

Im Moment Ich bin ihnen durch (‚TotalKills‘) Sortierung absteigend. Gibt es eine Möglichkeit, sie auf die gleiche Weise zu sortieren? Einschließlich zu prüfen, ob 'TotalKills' dann> 0 ist?

Antwort

3

Sie könnten einen Filter() -Methode zur Kette hinzufügen:

$array = $results->sortByDesc('TotalKills') 
     ->filter(function ($item) { 
      return $item->TotalKills > 0; 
     }) 
     ->map(function($item, $key) { 
      return [ 
       'WeaponId' => $item->WeaponId->StockId, 
       'TotalKills' => $item->TotalKills, 
       'TotalHeadshots' => $item->TotalHeadshots, 
      ]; 
     }); 
+0

sehr schöne Lösung – Brett

+0

Ja, das funktionierte perfekt! Vielen Dank – David