【问题标题】:return specific item from a laravel collection and remove it从 laravel 集合中返回特定项目并将其删除
【发布时间】:2014-05-31 00:44:48
【问题描述】:

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

$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
} 

我希望这很清楚 谢谢您的帮助 干杯。

【问题讨论】:

标签: php laravel closures


【解决方案1】:

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

function($item) use ($y) {
    // remove item from collection by key 
    //using collection.forget($key) 
} 

【讨论】:

  • 是的,但是如果我将闭包函数保留在不同的类中,我将如何将'$y'传递给它?
  • 您在问题中没有提到这一点。我不知道这是否可能。您可以尝试使用 use 在您的类中定义闭包并测试它是否在上下文中采用当前可用的 y
  • 抱歉没有具体说明,在 Collection 类中定义我的函数并直接在 $data 对象上使用它会更容易吗?还是那是不好的做法?谢谢
  • 我总是把我的闭包写在我需要的地方(在你的情况下在 each 里面)。这就是为什么它是一个闭包。在另一种情况下,它只是一个普通的传递函数。
【解决方案2】:

您可以尝试以下操作,假设您在 $variables$y=general 中有一些数据为 type,因此请检查 type 是否为 general,然后对类型为 @ 的模型执行某些操作987654327@ 然后将该模型放入$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]);
        }
    }
}

您也可以查看this article,与Collection 对象交互可能会有所帮助。

【讨论】:

  • 我有我的代码,就像你在这里提出的那样,但我想让它更简单/更短,并以某种方式使用集合对象本身的方法。顺便说一句,您可以在集合对象上使用忘记($key) 而不是 unset()。我会阅读您发布的文章,谢谢!
  • 我使用了unset,因为它比forget 快,而且最好使用原生的PHP 包装函数。
  • 这个答案,unset($data[$key]);,是我通常的做法。
  • 对不起@Salkz,没有得到你想要的。
  • @TheAlpha 我只是同意你的回答。
【解决方案3】:

在 laravel 5 中,你可以使用 where 方法来收集。

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

$removedItem = $data->where('key', 'value');

或者如果你使用 Larave 4,你可以在集合上调用过滤器方法

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多