Answers:
如果您还获得了密钥,则可以这样删除该项目:
foreach ($display_related_tags as $key => $tag_name) {
if($tag_name == $found_tag['name']) {
unset($display_related_tags[$key]);
}
}
json_encode()
。您可以$display_related_tags = array_values ($display_related_tags);
在foreach
循环后解决此问题。
$projects = array_filter($projects, function ($project) { return count($project->roles) > 0; });
将结果转换为对象。
更好的解决方案是使用以下array_filter
功能:
$display_related_tags =
array_filter($display_related_tags, function($e) use($found_tag){
return $e != $found_tag['name'];
});
如PHP 文档所述:
由于foreach依赖PHP 5中的内部数组指针,因此在循环内更改它可能会导致意外行为。
在PHP 7中,foreach不使用内部数组指针。
ARRAY_FILTER_USE_KEY - pass key as the only argument to callback instead of the value ARRAY_FILTER_USE_BOTH - pass both value and key as arguments to callback instead of the value
Default is 0 which will pass value as the only argument to callback instead.
也就是说,在这种情况下再次阅读答案当然并不重要。
display_related_tags = array_values(display_related_tags);
其后调用。
与其在数组上执行foreach()循环,不如使用array_search()查找适当的键会更快。在小型数组上,我会与foreach一起使用,以提高可读性,但是对于较大的数组或经常执行的代码,这应该更理想一些:
$result=array_search($unwantedValue,$array,true);
if($result !== false) {
unset($array[$result]);
}
需要严格的比较运算符!==,因为array_search()可以返回0作为$ unwantedValue的索引。
同样,上面的示例将仅删除第一个值$ unwantedValue,如果$ unwantedValue可以在$ array中出现多次,则应该使用array_keys()来查找所有值:
$result=array_keys($array,$unwantedValue,true)
foreach($result as $key) {
unset($array[$key]);
}
有关更多信息,请访问http://php.net/manual/en/function.array-search.php。
如果您有必须从foreach数组中删除多个值的情况,在这种情况下,您必须为每个值通过引用传递值:我尝试解释这种情况:
foreach ($manSkuQty as $man_sku => &$man_qty) {
foreach ($manufacturerSkus as $key1 => $val1) {
// some processing here and unset first loops entries
// here dont include again for next iterations
if(some condition)
unset($manSkuQty[$key1]);
}
}
}
在第二个循环中,您要取消设置第一个循环,出于性能目的,条目不会在迭代中再次出现,否则也不会从内存中取消设置,因为它们在内存中存在并且会在迭代中出现。
已经有答案可以阐明如何取消设置。与其在所有类中重复执行代码,不如使下面的函数在需要时在代码中使用它。在业务逻辑中,有时您不想公开某些属性。请参阅下面的一个班轮电话以删除
public static function removeKeysFromAssociativeArray($associativeArray, $keysToUnset)
{
if (empty($associativeArray) || empty($keysToUnset))
return array();
foreach ($associativeArray as $key => $arr) {
if (!is_array($arr)) {
continue;
}
foreach ($keysToUnset as $keyToUnset) {
if (array_key_exists($keyToUnset, $arr)) {
unset($arr[$keyToUnset]);
}
}
$associativeArray[$key] = $arr;
}
return $associativeArray;
}
致电方式:
removeKeysFromAssociativeArray($arrValues, $keysToRemove);
$key => &$tag_name
stackoverflow.com/a/2008893/922522进行