mistergraphx
7/20/2014 - 5:41 AM

Php - recursice tree

/**
  * Renvoie un tableau au format $array('name' => $nom, 'children' => array(array('name' => $nom, 'children' => ...), array('name' => $nom2, 'children' => ...)) 
  * @param $inputArray tableau initial contenant tes données
  * @param $nameToCheck nom de ta région pour récupérer les données
  */
function buildTree($inputArray, $nameToCheck){
    $arrayFinal = array();
    // On boucle sur la donnée initiale
    foreach($inputArray as $data){
        // Si on a le bon nom, on vérifie qu'il y ait ou non une liste d'enfants
        if($data['name'] == $nameToCheck){
            // Quoi qu'il en soit, on récupère le nom car il sera retourné
            $arrayFinal['name'] = $data['name'];
            // S'il y a des enfants, on renvoie un tableau d'enfants de format array(array('name' => x, 'children' => array()), array('name' => y, 'children' => ...))
            if(is_array($data['children'])){
                // Pour chaque enfant, tu récupère les infos le concernant. Ne pas oublier de passer le tableau initial, car il contient toutes les données dont tu as besoin
                foreach($data['children'] as $childrenName){
                    $arrayFinal['children'][] = buildTree($inputArray, $childrenName);
                }
            }else{
                // Si tu veux garder l'élément "children" présent dans ton tableau final, tu rajoutes ça
                $arrayFinal['children'] = null;
            }
        }
    }
    return $arrayFinal;
}
 
// Données initiales que tu récupères
$inputData = array(
    array('name' => 'Europe', 'children' => array('West','East')),
    array('name' => 'West', 'children' => array('Germany','France')),
    array('name' => 'Germany', 'children' => null),
    array('name' => 'France', 'children' => null),
    array('name' => 'East', 'children' => array('Boukoukastan','Roquefort-La-Bedoule')),
    array('name' => 'Boukoukastan', 'children' => array('Ville1', 'Ville2')),
    array('name' => 'Roquefort-La-Bedoule', 'children' => array('Ville3', 'Ville4')),
    array('name' => 'Ville1', 'children' => null),
    array('name' => 'Ville2', 'children' => null),
    array('name' => 'Ville3', 'children' => null),
    array('name' => 'Ville4', 'children' => null),
);
// Affiche la donnée initiale
echo '<pre>';
print_r($inputData);
echo '</pre>';
 
// Construit le tableau "relationnel"
$dataFinal = buildTree($inputData, 'Europe');
 
// Affiche le résultat
echo '<pre>';
print_r($dataFinal);
echo '</pre>';