是否可以通过回调调用方法 pop(laravel 集合)?

Is it possible to call method pop with callback (laravel collections)?

我有一个集合,其中包含来自 guzzle HTTP 客户端的答案。答案可以是 404、200 或 500。

我想从仅包含 200 和 404 状态的集合中弹出对象,并留下状态 500。所以,我想要这样的东西:

        $done = $res->pop(function ($item, $index) {
            $statusCode = $item->getStatusCode();
            return $statusCode === 404 || $statusCode === 200;
        });

但这是不可能的(因为 pop 方法不接受回调。有什么想法可以优雅地做到这一点吗?

如果您仍想在原始数组 (documentation here) 中保留状态为 500 的响应,我认为 filter 将是更好的解决方案:

$done = $res->filter(function ($item) {
    return $item->getStatusCode() === 500;
});

// $done will contain only responses with 500 status code
// $res will not be touched

否则,您可以使用 partition 将数据实际分成两组,保持原始数组不变 (documentation here):

list($status500, $status200_404) = $collection->partition(function ($item) {
    return $item->getStatusCode() === 500;
});

// $status500 will contain only responses with 500 status code
// $status200_404 will contain only responses with 200 and 404 status code
// $res will not be touched