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

墨辰丷
Libérer: 2023-03-31 12:42:01
original
2471 Les gens l'ont consulté

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));
Copier après la connexion

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] => 浙江省
        )
 
)
Copier après la connexion


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();
}
Copier après la connexion

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);
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal