从foreach中删除索引数组?

Posted

技术标签:

【中文标题】从foreach中删除索引数组?【英文标题】:Delete the index array from foreach? 【发布时间】:2012-12-27 19:56:57 【问题描述】:

简单的问题;如何从我的 foreach() 中删除正确的数组?

foreach ( $items as $e):
    if ( $e['seat'] == $users[$clientID]['seat']):
        //It's done, delete it.
        unset ( $e );
    endif;
endforeach;

unset($e) 似乎无法正常工作。从正确的索引中删除正确的数组的正确解决方案是什么?

【问题讨论】:

How to delete object from array inside foreach loop?的可能重复 【参考方案1】:

这是 xbonez 给出的 for 循环的替代方案,也可以传递 key 值:

foreach ( $items as $key => $e):
    if ( $e['seat'] == $users[$clientID]['seat']):
        //It's done, delete it.
        unset ( $items[$key] );
    endif;
endforeach;

我更喜欢这个版本,不过没关系!

【讨论】:

【参考方案2】:

foreach 中执行unset($e) 会取消设置变量$e,而不是它所代表的数组中的项目。您需要为此使用常规的 for 循环

for($i = 0; $i < count($items); $i++) 
   if ($items[$i]['seat'] == $users[$clientID]['seat']) 
      unset($items[$i])
   

【讨论】:

for ($arr as $key =&gt; $val) 会更好,因为您的答案仅限于非关联数组。【参考方案3】:

尝试类似:

foreach ($items as &$e):
    if ($e['seat'] == $users[$clientID]['seat']):
        //It's done, delete it.
        unset ($e);
    endif;
endforeach;

【讨论】:

以上是关于从foreach中删除索引数组?的主要内容,如果未能解决你的问题,请参考以下文章

在 ForEach 循环中删除项目会导致致命错误:索引超出范围

SwiftUI - 致命错误:从数组中删除元素时索引超出范围

删除最后一个数组元素时,SwiftUI列表ForEach索引超出范围

PHP:使用 foreach 从多维数组中删除元素(按键)

firebase 按索引从字段数组中删除对象

使用索引从对象数组中删除对象? [复制]