Apenas foi adicionadas aspas duplas na linha: if (!in_array("$campo", $excluir)) { pois foi detectado um bug, que se o campo for 0 e for especificado o $excluir, o in_array retorna que o 0 existe do array e não acrescenta este campo. echo (int) in_array(0, array("indice" => "valor")); // isso retorna 1 (verdadeiro)