Как Вы удаляете элемент массива в цикле foreach?

Я хочу циклично выполниться через массив с foreach проверять, существует ли значение. Если значение действительно существует, я хочу удалить элемент, который содержит его.

У меня есть следующий код:

foreach($display_related_tags as $tag_name) {
    if($tag_name == $found_tag['name']) {
        // Delete element
    }
}

Я не знаю, как удалить элемент, после того как значение найдено. Как я удаляю его?

Я должен использовать foreach для этой проблемы. Существуют, вероятно, альтернативы foreach, и добро пожаловать совместно использовать их.

115
задан Kevin 11 September 2013 в 22:02
поделиться

4 ответа

Если вы также получаете клавишу, вы можете удалить этот элемент следующим образом:

foreach ($display_related_tags as $key => $tag_name) {
    if($tag_name == $found_tag['name']) {
        unset($display_related_tags[$key]);
    }
}
202
ответ дан 24 November 2019 в 02:23
поделиться
foreach($display_related_tags as $key => $tag_name)
{
    if($tag_name == $found_tag['name'])
        unset($display_related_tags[$key];
}
9
ответ дан 24 November 2019 в 02:23
поделиться

Как уже упоминалось, вам нужно выполнить foreach с ключом и сбросить его с помощью ключа, но обратите внимание, что изменение массива во время итерации в целом является плохой идеей, хотя Я не уверен в правилах PHP на этот счет.

0
ответ дан 24 November 2019 в 02:23
поделиться

Вместо того, чтобы выполнять цикл 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 для дополнительной информации.

.
6
ответ дан 24 November 2019 в 02:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: