Если честно, то меня всегда удивляют такие вопросы.
Ну ведь любые операции над массивами решаются элементарно, просто с помощью цикла.
Надо перебрать строки? Перебираем массив по строкам.
Надо перебрать колонки - перебираем по строкам, а вложенные массивы поэлементно.
Надо проверить каждую колонку? Записываем результат по каждой колонке.
Вроде очевидные вещи же, которые выводятся из того простого факта, что любые операции над массивами делаются с помощью цикла. Не?
$columns = [];
foreach($array as $row) {
foreach ($row as $i=> $col) {
$filled = $col !== "";
$columns[$i] = !empty($columns[$i]) ? $columns[$i] : $filled;
}
}
foreach($columns as $col => $result) {
echo "Колонка $col ".($result ? "не" : ""). "пустая\n";
}