php - Find elements with empty value in multidimensional array
Solution:
If your input is always of a fixed depth, you can map the existing values to the keys of all empty items:
$output = array_map(function($row) {
    return array_keys(array_filter($row, function ($e) {
        return empty($e) && $e !== 0;
    }));
}, $arrays);
The outer function runs for each "row", the value of which is then converted into a list of all keys with empty values (excluding zeroes, as in the question).
This will keep the outer keys B & C as empty arrays, so if you want them to be removed as well then run another iteration of array_filter over the result:
$output = array_filter($output)
As mentioned in the comments, there are still several loops going on here, they're just not as visible in the code. A regular foreach loop might end up being a lot easier to read, and possibly perform faster as well.
Answer
Solution:
You can use next combination of array_walk & array_filter:
    $result = [];
    array_walk(
        $arrays,
        function($el, $key) use(&$result) {
            $empty = array_filter($el, function($el){return $el == "";});
            $empty_keys = array_keys($empty);
            if (count($empty_keys)) $result[$key] = $empty_keys;
        }
    );
Try it here
Answer
Solution:
This is another way to achieve your desired output.
$result = [];
 foreach($arrays as $key => $value) {
     $empty_arr = array_filter($value, function ($ele) {
         return empty($ele);
     });
      $empty_arr_keys = array_keys($empty_arr);
      if(!empty($empty_arr_keys)) $result[$key] = $empty_arr_keys;        
  }
        
 print_r($result);
Answer
Solution:
@iainn's answer can be sharpened up by calling !strlen() on the deep values.
Code: (Demo)
var_export(
    array_filter(
        array_map(
            fn($row) => array_keys(
                array_filter(
                    $row,
                    fn($v) => !strlen($v)
                )
            ),
            $array
        )
    )
);
But you will end up making fewer iterations and writing cleaner, more intuitive/readable code if you use classic loops. This is how I would write it in my own project:
Code: (Demo)
$result = [];
foreach ($array as $rowKey => $row) {
    foreach ($row as $key => $value) {
        if (!strlen($value)) {
            $result[$rowKey][] = $key;
        }
    }
}
var_export($result);