массив списка файлов php в дереве массива

У меня есть несколько массивов списков файлов с элементами, превышающими 100 единиц, которые мне нужно преобразовать в массив деревьев и вставить их в базу данных и вернуть дерево для вызова системы каталогов json api. Я потратил неделю на различные алгоритмы, все в какой-то момент они терпят неудачу. Это массив:

$files[] = array('dir1/dir2/dir3/file1.mkv', 44444); $files[] = array('dir1/dir2/dir3/file2.mkv', 44444); $files[] = array('dir1/dir2/file1.mkv', 44444); $files[] = array('dir1/dir2/file2.txt', 11111); $files[] = array('dir1/file1.exe', 22222); $files[] = array('dir1/file2.exe', 22222); $files[] = array('file1.rar', 3333); 

первым элементом является путь к файлу, второй элемент – размер файла. Эти файлы не существуют на этом сервере, они находятся на другом сервере, это сервер api. Мне нужно преобразовать его в массив вложенных деревьев следующим образом:

 Array ( [dir1] => Array ( [dir2] => Array ( [dir3] => Array ( [0] => Array ( [name] => file1.mkv [size] => 44444 ) [1] => Array ( [name] => file2.mkv [size] => 44444 ) ) [0] => Array ( [name] => file1.mkv [size] => 44444 ) [1] => Array ( [name] => file2.txt [size] => 11111 ) ) [0] => Array ( [name] => file1.exe [size] => 22222 ) [1] => Array ( [name] => file2.exe [size] => 22222 ) ) [0] => Array ( [name] => file1.rar [size] => 3333 ) ) 

Я написал некоторый код, но он поднимается только до 2-го уровня (dir2), а затем на третьем уровне (dir3) он не выполняет, как ожидалось.

код:

 foreach ($files as $file) { $info = pathinfo($file[0]); if ($info['dirname'] != '.') { if (strpos($info['dirname'], '/') !== false) { $dirs[pathinfo($info['dirname'])['dirname']][pathinfo($info['dirname'])['basename']][] = array('name' => $info['basename'], 'size' => $file[1]); } else { $dirs[$info['dirname']][] = array('name' => $info['basename'], 'size' => $file[1]); } } else { $dirs[] = array('name' => $info['basename'], 'size' => $file[1]); } } 

Этот код возвращает массив, если я удалю уровень dir3 из массива списка файлов, но с присутствующим dir3 он дает:

 Array ( [dir1/dir2] => Array ( [dir3] => Array ( [0] => Array ( [name] => file1.mkv [size] => 44444 ) [1] => Array ( [name] => file2.mkv [size] => 44444 ) ) ) [dir1] => Array ( [dir2] => Array ( [0] => Array ( [name] => file1.mkv [size] => 44444 ) [1] => Array ( [name] => file2.txt [size] => 11111 ) ) [0] => Array ( [name] => file1.exe [size] => 22222 ) [1] => Array ( [name] => file2.exe [size] => 22222 ) ) [0] => Array ( [name] => file1.rar [size] => 3333 ) ) 

Этот [dir1 / dir2] является проблемой, мне нужно, чтобы оно было идеальным деревом, поэтому я могу повторить его и вставить записи в базу данных.