是否可以通过回调调用方法 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
我有一个集合,其中包含来自 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