是否可以通过回调调用方法pop(laravel集合)?
我有一个集合,其中包含来自是否可以通过回调调用方法pop(laravel集合)?,laravel,laravel-collection,Laravel,Laravel Collection,我有一个集合,其中包含来自guzzleHTTP客户端的答案。答案可以是404、200或500 我想弹出只包含200和404状态的集合中的对象,并留下状态500。所以,我想说: $done = $res->pop(function ($item, $index) { $statusCode = $item->getStatusCode(); return $statusCode === 404 || $statusCode
guzzle
HTTP客户端的答案。答案可以是404、200或500
我想弹出只包含200和404状态的集合中的对象,并留下状态500。所以,我想说:
$done = $res->pop(function ($item, $index) {
$statusCode = $item->getStatusCode();
return $statusCode === 404 || $statusCode === 200;
});
但这是不可能的(因为
pop
方法不接受回调。有没有办法让它变得优雅?我认为filter
是一个更好的解决方案,如果您仍然希望将状态为500的响应保留在原始数组中():
$done=$res->filter(函数($item){
返回$item->getStatusCode()==500;
});
//$done将只包含状态代码为500的响应
//$res将不会被触动
否则,您可以使用partition
将数据实际分成两组,保持原始数组不变():
list($status500,$status200_404)=$collection->partition(函数($item){
返回$item->getStatusCode()==500;
});
//$status500将只包含状态代码为500的响应
//$status200_404将只包含带有200和404状态代码的响应
//$res将不会被触动
正在使用filter()
是否有效?我想您正在寻找reject()
:$collection->reject(函数(…){//如果为true,则从集合中删除});
(注意,这与filter()
相反;如果反转返回逻辑,两者都可以工作)谢谢,但筛选器不是pop
。它不会更改源集合。对吗?如果要更新原始集合,只需执行$res=$res->filter(…);
即可覆盖原始集合。