ajs*_*sie 116 php arrays foreach loops
我想循环遍历数组foreach以检查是否存在值.如果值确实存在,我想删除包含它的元素.
我有以下代码:
foreach($display_related_tags as $tag_name) {
if($tag_name == $found_tag['name']) {
// Delete element
}
}
Run Code Online (Sandbox Code Playgroud)
一旦找到值,我不知道如何删除元素.我该如何删除它?
我必须使用foreach这个问题.可能有替代品foreach,欢迎您分享.
Gum*_*mbo 203
如果您也获得了密钥,则可以删除该项:
foreach ($display_related_tags as $key => $tag_name) {
if($tag_name == $found_tag['name']) {
unset($display_related_tags[$key]);
}
}
Run Code Online (Sandbox Code Playgroud)
Nei*_*ils 33
更好的解决方案是使用该array_filter功能:
$display_related_tags =
array_filter($display_related_tags, function($e) use($found_tag){
return $e != $found_tag['name'];
});
Run Code Online (Sandbox Code Playgroud)
正如php 文档所示:
由于foreach依赖于PHP 5中的内部数组指针,因此在循环中更改它可能会导致意外行为.
在PHP 7中,foreach不使用内部数组指针.
foreach($display_related_tags as $key => $tag_name)
{
if($tag_name == $found_tag['name'])
unset($display_related_tags[$key];
}
Run Code Online (Sandbox Code Playgroud)
小智 6
而不是在数组上执行foreach()循环,使用array_search()来查找正确的键会更快.在小型数组上,我会使用foreach以获得更好的可读性,但对于更大的数组或经常执行的代码,这应该更优化:
$result=array_search($unwantedValue,$array,true);
if($result !== false) {
unset($array[$result]);
}
Run Code Online (Sandbox Code Playgroud)
需要严格的比较运算符!==,因为array_search()可以返回0作为$ unwantedValue的索引.
此外,上述例子只是删除第一个值$ unwantedValue,如果$ unwantedValue可以在$数组中出现多于一次,你应该用array_keys(),发现所有的人:
$result=array_keys($array,$unwantedValue,true)
foreach($result as $key) {
unset($array[$key]);
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请查看http://php.net/manual/en/function.array-search.php.
| 归档时间: |
|
| 查看次数: |
125979 次 |
| 最近记录: |