1

如果你有一个简单map的使用 Laravel 集合,你可以通过执行以下操作轻松访问基本集合:

$items = [ "dog", "cat", "unicorn" ];
collect($items)->map(function($item) use ($items) {
    d($items); // Correctly outputs $items array
});

如果使用带有过滤器/拒绝的流式链,$items 不再代表项目集:

$items = [ "dog", "cat", "unicorn" ];
collect($items)
    ->reject(function($item) {
        // Reject cats, because they are most likely evil
        return $item == 'cat'; 
    })->map(function($item) use ($items) {
        // Incorrectly (and obviously) outputs $items array (including "cat");
        // Would like to see the $items (['dog', 'unicorn']) here
        d($items);

        // Will correctly dump 'dog' on iteration 0, and 
        // will correctly dump 'unicorn' on iteration 1 
        d($item); 
    });

问题

是否可以访问修改后的项目数组,或者可以访问当前状态的集合。

Javascript 中的类似库,如 lodash,将集合作为第三个参数传入 - Laravel 集合没有。

更新/编辑

需要明确的是,我可以做类似的事情(但它会破坏链条)。我想做以下事情,但没有集合的中间存储。

    $items = [ "dog", "cat", "unicorn" ];
    $items = collect($items)
        ->reject(function($item) {
            // Reject cats, because they are most likely evil
            return $item == 'cat'; 
        });

    $items->map(function($item) use ($items) {
            // This will work (because I have reassigned 
            // the rejected sub collection to $items above)
            d($items);

            // Will correctly dump 'dog' on iteration 0, and 
            // will correctly dump 'unicorn' on iteration 1 
           d($item); 
        });
4

3 回答 3

0

你可以这样做。

  return collect($models->items())->each(function ($item, $index){
        if( !$item->quoteReturnDetail){  echo  $item ;  exit(); }   });
于 2022-01-11T12:42:58.423 回答
0

当你在d($items);里面做时,map()它指的是你原来的数组。如果你在var_dump($item)里面做,map()你会看到它只输出dogunicorn

$items = [ "dog", "cat", "unicorn" ];
$newItems = collect($items)
    ->reject(function($item) {
        // Reject cats, because they are most likely evil
        return $item == 'cat';
    })->map(function($item) use ($items) {
        var_dump( $item );//TODO
    });

var_dump( $newItems );//TODO
于 2017-03-08T10:56:35.383 回答
0

您可以通过运行类似的东西来访问集合的当前状态$this->all()

$items = collect(["dog", "cat", "unicorn"])
    ->reject(function($item) {
        return $item == 'cat'; 
    })
    ->map(function($item) {
        dd($item); // current item (dog/unicorn);
        dd($this->all()); // all items in the collection (dog and unicorn);
    });
于 2017-03-15T15:09:41.633 回答