Как вам уже ответили, потому-что вы увеличиваете значение $i (
$i=$i+2) и в то же время уменьшаете количество элементов в массиве (
unset($array[$i])).
Чтобы удалить все четные значения из массива, вы можете переписать свой код следующим образом:
//Создаем массив с числами от 0 до 20
$array = range(0, 20, 1);
foreach($array as $i => $v) {
// проверяем остаток при делении по модулю
if ($v % 2 === 0) {
unset($array[$i]);
}
}
foreach ($array as $value){
echo $value . '<br>';
}
Результат выполнения будет таким: 1 3 5 7 9 11 13 15 17 19