Wtedy można wykorzystać drugi parametr array_filter, czyli callback, który będzie sprawdzał czy dana wartość znajduje się w tablicy, w której podasz swoje defaulty.
function is_default($var){
$defaults=array('default1','default2','default3'); if(in_array($var,$defaults) || $var=='' || $var===NULL){ return false;
}else{ return $var; }
}
W tym przypadku nie jest to wydajne rozwiązanie, ale też pewnie nie masz ogromnej bazy. Kolejnym problemem jest to, że musisz zdefiniować defaulty. W takiej sytuacji zastanawiałbym się, czy nie dodać malego pola do tabeli i do niego wpisywać ilość wypełnionych pól, albo postęp. Pole to wypełniasz przy insercie i update'ach. Wartość tego pola możesz obliczyć zgodnie z poprzednim kodem tylko jako $row daj $_POST, w którym użytkownik uzupełnia dane, o ile w formularzu masz puste pola bez default. Ewentualnie wtedy możesz sprawdzać tylko niektóre pola czy nie są takie jak default i dekrementować wartość licznika.
Co do ostatniego:
Select EXPECT, niestety wymaga do dodatkowej tabeli tymczasowej w bazie i jest to bardzo nieefektywne, lepiej tego nie stosować jeśli nie trzeba.