Кролик имеет правильный ответ для использования ссылок для редактирования значений и индекса для сброса в цикле foreach (я бы проголосовал за вас, но это мой первый пост, поэтому у меня еще нет 15 представителей, извините)
Не забудьте использовать ссылку, если вы передадите ее функции, которая также должна отредактировать значение.
Вам также нужно будет передать массив в качестве ссылки, если он удалит из него значение.
Я бы порекомендовал сделать функцию, возвращающую логическое значение, удалять ли, чтобы предотвратить создание дополнительных ссылок. например,
foreach ($array AS $key => &$value) {
//& reference only needed if execFunction must edit $value
if (execFunction(&$value)) {
unset($array[$key]);
} else {
$value['exec_failed']+=1;
}
}
unset($value);
также ссылка на $ value останется за рамками цикла, таким образом, завершающий неустановленный.
Последняя мысль, звучало так, как будто вы хотели перебрать массив несколько раз. Обязательно обратите внимание на то, как перестает выполняться ваш цикл.