Bonjour à tous!

Je peine à transformer un fichier "plat" en une structure de données de type arbre.

Imaginons une commande tree qui affiche le contenu d'un répertoire de manière récursive sous cette forme:

+rep1
|
|--+ rep1.1
| |
| |---+ rep 1.1.1
| |
| + rep1.2
|
|
+rep2

A partir de cette affichage, j'arrive assez facilement à créer un tableau de la forme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
$dir = array(
     array("rank"=> 0, "rep"=> "rep1"),
     array("rank"=> 1, "rep"=> "rep1.1"),
     array("rank"=> 2, "rep"=> "rep1.1.1"),
     array("rank"=> 1, "rep"=> "rep1.2"),
     ....
)
où rank est ici le nombre de fois où je trouve le caractère '+' afin de hiérarchiser ces répertoires.

Je me demande quelle est la meilleure manière de traiter ce genre de données si je souhaite créer par la suite un tableau de la forme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
$dir = array(
        "rep1" => array(
                "rep1.1"=>array(
                        ...
                ),
                "rep1.2" => array(
                )
        )...
J'ai essayé en de la manière suivante mais ça ne fonctionne pas super...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
function parse($csv){
	$z = sizeof($csv);
 
	$return = array();
 
	for($i=0;$i<$z;$i++){
 
		$A = explode(';',$csv[$i]);
		if(isset($csv[$i-1])){
			$B = explode(';',$csv[$i-1]);
			$rank_b = $B[0];
			$command_b = $B[1];
		}
		$rank = $A[0];
		$command = $A[1];
 
		if($rank > 1){
			$return[$rank_b][$command_b][] = array(
				"command" => $command
			);
		} else {
			$return[$rank][$command] = array(
				"command" => $command
			);
		}
 
	}
 
	header('Content-type: application/json');
	echo json_encode($return);
}
Des idées sur la manière de procéder?