Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以通过回调调用方法pop(laravel集合)?_Laravel_Laravel Collection - Fatal编程技术网

是否可以通过回调调用方法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(…);
即可覆盖原始集合。