Maison >développement back-end >tutoriel php >Méthode de génération d'arbre d'implémentation de référence en PHP

Méthode de génération d'arbre d'implémentation de référence en PHP

墨辰丷
墨辰丷original
2018-06-11 09:59:212481parcourir

Cet article présente principalement la méthode de génération d'un arbre d'implémentation de référence en PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Utilisez-vous toujours le parcours récursif de la classification Infinitus qui fait perdre du temps et de la mémoire ? Après avoir lu cet article, je pense que vous devriez changer.

Il s'agit d'une méthode d'arbre couvrant de classification PHP Infinitus très concise que j'ai vue sur OSChina. Je l'ai cité et compilé pour le partager.

Le code est le suivant :

function generateTree($items){
    $tree = array();
    foreach($items as $item){
        if(isset($items[$item['pid']])){
            $items[$item['pid']]['son'][] = &$items[$item['id']];
        }else{
            $tree[] = &$items[$item['id']];
        }
    }
    return $tree;
}
$items = array(
    1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),
    2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),
    3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),
    4 => array('id' => 4, 'pid' => 3, 'name' => '长丰县'),
    5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市'),
);
print_r(generateTree($items));

Vous pouvez voir le résultat imprimé ci-dessous :

Le code est le suivant :

Array
(
    [0] => Array
        (
            [id] => 1
            [pid] => 0
            [name] => 安徽省
            [son] => Array
                (
                    [0] => Array
                        (
                            [id] => 3
                            [pid] => 1
                            [name] => 合肥市
                            [son] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 4
                                            [pid] => 3
                                            [name] => 长丰县
                                        )
 
                                )
 
                        )
 
                    [1] => Array
                        (
                            [id] => 5
                            [pid] => 1
                            [name] => 安庆市
                        )
 
                )
 
        )
 
    [1] => Array
        (
            [id] => 2
            [pid] => 0
            [name] => 浙江省
        )
 
)


L'arbre couvrant ci-dessus La méthode peut également être simplifiée à 5 lignes :

Le code est le suivant :

function generateTree($items){
    foreach($items as $item)
        $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];
    return isset($items[0]['son']) ? $items[0]['son'] : array();
}

La méthode arborescente ci-dessus des données de classification Infinitus vaut apprendre de. Mais je pense que l'utilisation réelle de ce code n'est pas évidente. Si vous souhaitez extraire les données de l'arbre formaté, vous devez quand même récurer :

Le code est le suivant :

/**
 * 如何取数据格式化的树形数据
 */
$tree = generateTree($items);
function getTreeData($tree){
    foreach($tree as $t){
        echo $t[&#39;name&#39;].&#39;<br>&#39;;
        if(isset($t[&#39;son&#39;])){
            getTreeData($t[&#39;son&#39;]);
        }
    }
}
getTreeData($tree);

Résumé : Ce qui précède représente l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.

Recommandations associées :

Comment implémenter la couche de persistance en php

Comment obtenir le type de fichier MIME dans php

Comment utiliser PHP pour faire fonctionner la base de données afin de déterminer si une table existe

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn