Я думаю, что я только что придумал довольно другой способ подсчета элементов (неограниченного) массива MD.
<?php
$array = array("ab", "cd", array("ef", "gh", array("ij")), "kl");
$i = 0;
array_walk_recursive($array, function() { global $i; return ++$i; });
echo $i;
?>
Возможно, не самый экономичный способ подсчета, но, похоже, он работает! Внутри анонимной функции вы можете добавить элемент только к подсчитанному итогу, если он имеет непустое значение, например, если вы хотите расширить функциональность. Пример чего-то похожего можно увидеть здесь:
<?php
$array = array("ab", "cd", array("ef", "gh", array("ij")), "kl");
$i = 0;
array_walk_recursive($array, function($value, $key) { global $i; if ($value == 'gh') ++$i; });
echo $i;
?>