Php 从laravel集合中返回特定项目并将其删除

Php 从laravel集合中返回特定项目并将其删除,php,laravel,closures,Php,Laravel,Closures,我正在尝试映射查询结果的集合。具体地说,我想检查该集合的某个项是否适合我的闭包,返回该项并将其从该集合中删除。此外,我还需要使用闭包函数传递参数 $data = Model::where('something', 'stuff')->get(); $res = array(); foreach ($x as $y) { $res = $data->each("closure function described above with $y"); // do stuff wit

我正在尝试映射查询结果的集合。具体地说,我想检查该集合的某个项是否适合我的闭包,返回该项并将其从该集合中删除。此外,我还需要使用闭包函数传递参数

$data = Model::where('something', 'stuff')->get();
$res = array();
foreach ($x as $y) {
  $res = $data->each("closure function described above with $y");
  // do stuff with $res
} 
我希望这是清楚的 谢谢你的帮助
干杯。

要在闭包中使用变量,必须使用关键字“use”;)


要在闭包中使用变量,必须使用关键字“use”;)


要在闭包中使用变量,必须使用关键字“use”;)


要在闭包中使用变量,必须使用关键字“use”;)


您可以尝试以下方法,假设您在
$variables
$y=general
中有一些数据作为
类型
,因此,检查
类型
是否为
常规
,然后对类型为
常规
的模型进行处理,然后将该模型放入
$res
数组中,然后将其从集合中移除:

$variables = '...';
$res = array();
$y = 'general'; // for example, $y contains general
$data = Model::where('something', 'stuff')->get();
foreach ($variables as $variable) {
    foreach ($data as $key => $model) {
        if($model->type == $y) {
            // Do something with $model
            $res[] = $model;
            unset($data[$key]);
        }
    }
}

您还可以检查,与
集合
对象交互可能会有帮助。

您可以尝试以下操作,假设您在
$variables
中有一些数据,并且
$y=general
作为
类型
,因此,检查
类型
是否为
常规
,然后对类型为
常规
的模型进行处理,然后将该模型放入
$res
数组中,然后将其从集合中移除:

$variables = '...';
$res = array();
$y = 'general'; // for example, $y contains general
$data = Model::where('something', 'stuff')->get();
foreach ($variables as $variable) {
    foreach ($data as $key => $model) {
        if($model->type == $y) {
            // Do something with $model
            $res[] = $model;
            unset($data[$key]);
        }
    }
}

您还可以检查,与
集合
对象交互可能会有帮助。

您可以尝试以下操作,假设您在
$variables
中有一些数据,并且
$y=general
作为
类型
,因此,检查
类型
是否为
常规
,然后对类型为
常规
的模型进行处理,然后将该模型放入
$res
数组中,然后将其从集合中移除:

$variables = '...';
$res = array();
$y = 'general'; // for example, $y contains general
$data = Model::where('something', 'stuff')->get();
foreach ($variables as $variable) {
    foreach ($data as $key => $model) {
        if($model->type == $y) {
            // Do something with $model
            $res[] = $model;
            unset($data[$key]);
        }
    }
}

您还可以检查,与
集合
对象交互可能会有帮助。

您可以尝试以下操作,假设您在
$variables
中有一些数据,并且
$y=general
作为
类型
,因此,检查
类型
是否为
常规
,然后对类型为
常规
的模型进行处理,然后将该模型放入
$res
数组中,然后将其从集合中移除:

$variables = '...';
$res = array();
$y = 'general'; // for example, $y contains general
$data = Model::where('something', 'stuff')->get();
foreach ($variables as $variable) {
    foreach ($data as $key => $model) {
        if($model->type == $y) {
            // Do something with $model
            $res[] = $model;
            unset($data[$key]);
        }
    }
}

您还可以检查,与
集合
对象交互可能会有所帮助。

对于laravel 5,您可以在集合上使用where方法

$data = Model::where('something', 'stuff')->get();

$removedItem = $data->where('key', 'value');
或者,如果您使用Larave 4,您可以在集合上调用filter方法

$removedItem = $data->filter(function($item) use ($removedValue) {
    return $item->key == $removedValue;
});

$data = $data->diff($removedItem);

使用laravel 5,您可以在收集时使用where方法

$data = Model::where('something', 'stuff')->get();

$removedItem = $data->where('key', 'value');
或者,如果您使用Larave 4,您可以在集合上调用filter方法

$removedItem = $data->filter(function($item) use ($removedValue) {
    return $item->key == $removedValue;
});

$data = $data->diff($removedItem);

使用laravel 5,您可以在收集时使用where方法

$data = Model::where('something', 'stuff')->get();

$removedItem = $data->where('key', 'value');
或者,如果您使用Larave 4,您可以在集合上调用filter方法

$removedItem = $data->filter(function($item) use ($removedValue) {
    return $item->key == $removedValue;
});

$data = $data->diff($removedItem);

使用laravel 5,您可以在收集时使用where方法

$data = Model::where('something', 'stuff')->get();

$removedItem = $data->where('key', 'value');
或者,如果您使用Larave 4,您可以在集合上调用filter方法

$removedItem = $data->filter(function($item) use ($removedValue) {
    return $item->key == $removedValue;
});

$data = $data->diff($removedItem);


是的,但如果我将闭包函数保留在另一个类中,我将如何将“$y”传递给它?你在问题中没有提到这一点。我不知道这是否可能。您可以尝试使用use在类中定义闭包,并测试它是否在上下文中使用当前可用的y。对不起,不具体,在Collection类中定义my函数并直接在$data对象上使用它会更容易吗?还是这种做法不好?谢谢,我总是在我需要的地方写闭包(在你的例子中,在each中)。这就是为什么这是一个结束。在另一种情况下,它只是一个普通的传递函数。是的,但是如果我将闭包函数保留在另一个类中,我将如何将“$y”传递给它?你在问题中没有提到这一点。我不知道这是否可能。您可以尝试使用use在类中定义闭包,并测试它是否在上下文中使用当前可用的y。对不起,不具体,在Collection类中定义my函数并直接在$data对象上使用它会更容易吗?还是这种做法不好?谢谢,我总是在我需要的地方写闭包(在你的例子中,在each中)。这就是为什么这是一个结束。在另一种情况下,它只是一个普通的传递函数。是的,但是如果我将闭包函数保留在另一个类中,我将如何将“$y”传递给它?你在问题中没有提到这一点。我不知道这是否可能。您可以尝试使用use在类中定义闭包,并测试它是否在上下文中使用当前可用的y。对不起,不具体,在Collection类中定义my函数并直接在$data对象上使用它会更容易吗?还是这种做法不好?谢谢,我总是在我需要的地方写闭包(在你的例子中,在each中)。这就是为什么这是一个结束。在另一种情况下,它只是一个普通的传递函数。是的,但是如果我将闭包函数保留在另一个类中,我将如何将“$y”传递给它?你在问题中没有提到这一点。我不知道这是否可能。您可以尝试使用use在类中定义闭包,并测试它是否在上下文中使用当前可用的y。对不起,不具体,在Collection类中定义my函数并直接在$data对象上使用它会更容易吗?还是这种做法不好?谢谢,我总是在我需要的地方写闭包(在你的例子中,在each中)。这就是为什么这是一个结束。在另一种情况下,它只是一个普通的传递函数。我有我的代码,就像你在这里提出的一样,但我想让它更简单/更短,并以某种方式使用集合对象本身的方法。顺便说一句,您可以在集合对象上使用forget($key),而不是unset()。我会看你贴的文章,谢谢!我使用了
unset
,因为它比
forget
快,这是