我有一个集合,我想在我获取它的一些元素时进行迭代和修改。但我找不到删除该元素的方法或方法。
$selected = [];
foreach ($collection as $key => $value) {
if ($collection->selected == true) {
$selected[] = $value;
unset($value);
}
}
这只是我演示问题的一种表现形式。
在@Ohgodwhy推荐了forget()函数后,我再次检查它,发现我实际上误解了这个函数。这正是我在寻找的。在我在if语句中添加“$ collection-> forget($ key)”之后,就像下面的演示一样,它有效。
$selected = [];
foreach ($collection as $key => $value) {
if ($collection->selected == true) {
$selected[] = $value;
$collection->forget($key);
}
}
(这只是一个示范)
答案 0 :(得分:71)
答案 1 :(得分:14)
或者您可以使用reject
method
$newColection = $collection->reject(function($element) {
return $item->selected != true;
});
或pull
method
$selected = [];
foreach ($collection as $key => $item) {
if ($item->selected == true) {
$selected[] = $collection->pull($key);
}
}
答案 2 :(得分:2)
Laravel Collection
实现了PHP ArrayAccess
接口(这就是为什么可以首先使用foreach
的原因。)
如果您已经拥有密钥,则可以只使用PHP unset
。
我稍微喜欢这个,因为它可以明显地修改集合。
foreach ($collection as $key => $value) {
unset($collection[$key]);
}
答案 3 :(得分:0)
如果您知道未设置的密钥,请直接用逗号输入 分开
if (this.lastCall) clearTimeout(this.lastCall);
this.lastCall = setTimeout(........);
答案 4 :(得分:0)
我假设$collection->selected
的意思是$value->selected
,然后我将重构完整的代码,如下所示:
/**
* Filter all `selected` items
*
* @link https://laravel.com/docs/5.8/collections#method-filter
*/
$selected = $collection->filter(function($value, $key) {
return $value->selected;
})->toArray();