Parser un fichier en une structure de type arbre
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:
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:
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:
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?