对对象大于 0 的 Laravel 集合进行排序 - Laravel 5.2

Dav*_*vid 0 php collections json laravel laravel-5

我正在调用 Halo 5 API,特别是获取竞技场中每个玩家使用的武器。我遇到的问题是,当我拨打电话时,有 7 种武器被玩家击杀 0 次,如下所示:

\n\n
18 => array:3 [\xe2\x96\xbc\n    "WeaponId" => 2457457776.0\n    "TotalKills" => 0\n    "TotalHeadshots" => 0\n  ]\n  53 => array:3 [\xe2\x96\xbc\n    "WeaponId" => 2015271382\n    "TotalKills" => 0\n    "TotalHeadshots" => 0\n  ]\n  51 => array:3 [\xe2\x96\xb6]\n  48 => array:3 [\xe2\x96\xb6]\n  44 => array:3 [\xe2\x96\xb6]\n  27 => array:3 [\xe2\x96\xb6]\n  32 => array:3 [\xe2\x96\xb6]\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想把这 7 件武器从我的收藏中拿出来:

\n\n

这就是我的收藏的设置方式:

\n\n
    public function getArenaWeaponKills($playerArenaWeaponStats) {\n\n        $results = collect($playerArenaWeaponStats->Results[0]->Result->ArenaStats->WeaponStats);\n\n        $array = $results->sortByDesc(\'TotalKills\')->map(function($item, $key) {\n            return [\n                \'WeaponId\' => $item->WeaponId->StockId,\n                \'TotalKills\'   => $item->TotalKills,\n                \'TotalHeadshots\' => $item->TotalHeadshots,\n            ];\n        });\n\n        return $array;\n    } \n
Run Code Online (Sandbox Code Playgroud)\n\n

现在我正在按(\'TotalKills\')降序对它们进行排序。有没有办法以相同的方式对它们进行排序,包括检查“TotalKills”是否>然后0?

\n

Den*_*nko 5

您可以将 filter() 方法添加到链中:

$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,
            ];
        });
Run Code Online (Sandbox Code Playgroud)