Необходимо преобразовать массив исходя из его определенной структуры, php

Массив вида (данный массив приходит после обработки csv файла):

Array
(
[0] => Array
    (
        [0] => Аренда
        [1] => 
        [2] => 
        [3] => 
    )

[1] => Array
    (
        [0] => 
        [1] => Аренда спецтехники
        [2] => 
        [3] => 
    )

[2] => Array
    (
        [0] => 
        [1] => 
        [2] => Аренда автобетононасоса
        [3] => 
    )

[3] => Array
    (
        [0] => 
        [1] => 
        [2] => Аренда автовышки
        [3] => 
    )

[4] => Array
    (
        [0] => 
        [1] => 
        [2] => Аренда автогрейдера
        [3] => 
    )

[5] => Array
    (
        [0] => 
        [1] => 
        [2] => Аренда автокрана
        [3] => 
    )

[6] => Array
    (
        [0] => 
        [1] => 
        [2] => Аренда бульдозера
        [3] => 
    )

[7] => Array
    (
        [0] => 
        [1] => 
        [2] => Аренда гидромолота
        [3] => 
    )

[8] => Array
    (
        [0] => 
        [1] => 
        [2] => Аренда гидроподъемника
        [3] => 
    )

Должен быть преобразован к массиву вида:

Array
(
[0] => Array
    (
        [0] => Аренда
        [1] => Аренда спецтехники
        [2] => Array
            (
               [0] => Аренда автобетононасоса
               [1] => Аренда автовышки
               [2] => Аренда автогрейдера
               [3] => Аренда автокрана
                     ....
             )
        [3] => 
    )
 [1] => Array
    (
        [0] => Категория
        [1] => Подкатегория категории
        [2] => Array
            (
               ....сервисы подкатегории...
               [0] => сервис
               [1] => сервис
               [2] => сервис
               [3] => сервис
                     ....
             )
        [3] => 
    )
......
)

Ответы (2 шт):

Автор решения: frozencoast

Попробуйте использовать это:

function convert($arr) {
  $result = array();

  if (is_array($arr)) {
    foreach ($arr as $item) {
      merge($result, $item);
    }
  }

  return $result;
}

function merge(&$node, $item) {
  if (is_array($item)) {
    foreach ($item as $k => $v) {
      if (isset($node[$k])) {
        merge($node[$k], $v);
      } else {
        $node[$k] = $v;
      }
    }
  } elseif ($item) {
    if (is_array($node)) {
      $node[] = $item;
    } elseif ($node) {
      $node = array($node, $item);
    } else {
      $node = $item;
    }
  }

  return $node;
}

echo '<pre>';
print_r($arr);
print_r(convert($arr));
echo '</pre>';
→ Ссылка
Автор решения: splash58

То, что сказано в вопросе можно сделать таким образом

function myjoin(...$arrs) {
    $arrs = array_filter($arrs);
    return count($arrs) == 1 ? array_shift($arrs) : $arrs;
}

$res = array_map('myjoin', ...$arr);
→ Ссылка