Почему не удаляется первое значение из масива с ключем 0?
потому что 0 == false...
любые функции, которые возвращают ключи массивов, позиции в строках и т.п. нужно проверять так:if(false !== array_search($form, $bad_block)) {
    // ...
}
array_search на нулевом индексе возвращает 0, условие не проходит.
используйте array_diff