Вы смотрели на array_walk_recursive? Это не обязательно более эффективно, но может быть и лучше, в зависимости от того, что вы пытаетесь сделать.
Вот пример с вашими массивами (как указано выше). В примере игнорируются ключи (в соответствии с вашим образцом), но они доступны. Ваш образец проходит только один уровень, но вы можете сделать это больше, если вам нужно.
<?php
$array = [
$inner_array1 = [1, 2, 3, 4],
$inner_array2 = [a, b, c, d]
];
function test_print($item, $key)
{
echo $item;
}
array_walk_recursive($array, 'test_print');
?>