Ske*_*tor 53 collections laravel
我有一个集合,我想迭代和修改,同时我获取它的一些元素.但我找不到删除该元素的方法或方法.
$selected = [];
foreach ($collection as $key => $value) {
if ($collection->selected == true) {
$selected[] = $value;
unset($value);
}
}
Run Code Online (Sandbox Code Playgroud)
这只是我演示问题的一个表示.
@Ohgodwhy建议使用forget()函数后,我再次检查它,发现我实际上误解了函数.这正是我在寻找的.在我在if语句中添加"$ collection-> forget($ key)"之后,就像下面的演示一样,它有效.
$selected = [];
foreach ($collection as $key => $value) {
if ($collection->selected == true) {
$selected[] = $value;
$collection->forget($key);
}
}
Run Code Online (Sandbox Code Playgroud)
(这只是一个演示)
Ohg*_*why 86
你会想要使用 ->forget()
$collection->forget($key);
Run Code Online (Sandbox Code Playgroud)
链接到忘记方法文档
huu*_*uuk 18
或者你可以使用reject
方法
$newColection = $collection->reject(function($element) {
return $item->selected != true;
});
Run Code Online (Sandbox Code Playgroud)
或pull
方法
$selected = [];
foreach ($collection as $key => $item) {
if ($item->selected == true) {
$selected[] = $collection->pull($key);
}
}
Run Code Online (Sandbox Code Playgroud)
alg*_*thm 12
我不喜欢迭代集合并在循环内操作甚至该集合的内容的解决方案。这可能会导致意外的行为。
另请参阅此处: https: //stackoverflow.com/a/2304578/655224以及评论中给定的链接http://php.net/manual/en/control-structs.foreach.php#88578
因此,使用时foreach
似乎没问题,但恕我直言,更具可读性和简单的解决方案是将您的集合过滤为新的集合。
/**
* Filter all `selected` items
*
* @link https://laravel.com/docs/7.x/collections#method-filter
*/
$selected = $collection->filter(function($value, $key) {
return $value->selected;
})->toArray();
Run Code Online (Sandbox Code Playgroud)
Laravel Collection
实现了PHP ArrayAccess
接口(这就是为什么foreach
首先可以使用的原因)。
如果已经有了密钥,则可以使用PHP unset
。
我更喜欢这样做,因为它可以明显地修改集合,并且易于记忆。
foreach ($collection as $key => $value) {
unset($collection[$key]);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
69347 次 |
最近记录: |