Если вам действительно не нравится рекурсия ... try shifting вместо: :)
$a = array(1,2,array(3,4, array(5,6,7), 8), 9);
$o = [];
for ($i=0; $i<count($a); $i++) {
if (is_array($a[$i])) {
array_splice($a, $i+1, 0, $a[$i]);
} else {
$o[] = $a[$i];
}
}
Примечание: в этой простой версии это не поддерживает ключи массива.