Levelparser

Description

Bonjour,
un petit code simple qui permet de parser un arbre représenté par une ligne : "['noeud 1']['noeud 2" ['fils noeud 2'] ]"
Ceci donnera le tableau suivant : array(2) {
["noeud 1"]=>
array(0) {
}
["noeud 2"]=>
array(1) {
["fils noeud 2"]=>
array(0) {
}
}
}

Invoquer le code :
perso dans un terminal : php main.php
ou php tests.php et voir la sortie sur le term`.

Livrables :
LevelParser.php : contient notre classe principale
-> dans ce fichier vous pouvez modifier les constantes suivantes :
MARKER_START_NEWLEVEL, MARKER_END_NEWLEVEL
représentant l'ouverture d'un niveau , par defaut "[", et sa fermeture par défaut "]".
main.php : exemple pratique d'utilisation de LevelParser affiché ci bas avec : CreateFoldersArborescence
tests.php : quelque test unitaires.

Attention :
- la limite du systeme est qu'il ne faut pas utiliser MARKER_START_NEWLEVEL, MARKER_END_NEWLEVEL dans un nom de noeud,
sinon soit sa pete si vous en insérant sans les refermer par exemple : "[ 'mon noeud [' ]". ou ça interpretera mal la chose dans un cas comme celui-ci :
"[ '[mon noeud]']"

Source / Exemple :


//Example d'utilisation pratique. 
//Representer une arborescence de dossier avec cette méthode.
//renvoie un tableau a 1 dim, avec sur chaque ligne le chemin d'un rep a créer
function CreateFoldersArborescence($treeSerialized)
{
	$oTree = new LevelParser($treeSerialized);
	$bOk = $oTree->Init($treeSerialized) && $oTree->Parse();
	$arPaths = array();
	
	if (!$bOk)
	{
		echo "Error: " . $oTree->GetLastError() . "\r\n";
	}
	else
	{
		CreatePathRec($oTree->GetResult(), $arPaths, "");
	}
	return $arPaths;		
}

function CreatePathRec(&$refArTree, &$arLines, $strPrefix)
{
	foreach ($refArTree as $key => $arlevelEntries)
	{
		$arLines[] = $strPrefix . '/' . $key ;
		if (count($arlevelEntries) > 0)
			CreatePathRec($arlevelEntries, $arLines, $arLines[count($arLines)-1] );
	}
	return ;
}

Conclusion :


En utilisant CreateFoldersArborescence avec la ligne d'exemple du début "['noeud 1']['noeud 2" ['fils noeud 2'] ]",
on se retrouve avec ceci en sortie.

Array
(
[0] => /noeud 1
[1] => /noeud 2
[2] => /noeud 2/fils noeud 2
)

Codes Sources

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.