Implémentation récursive de la classification infinie en PHP

王林
Libérer: 2023-05-07 11:32:07
original
2651 Les gens l'ont consulté

Dans le développement web, la classification est une fonction très courante. Et la classification infinie, comme son nom l'indique, consiste à classer selon le niveau infini. Dans le processus d'interaction entre le front et le back end, certaines méthodes doivent être utilisées pour réaliser cette classification, et la récursivité de PHP en fait partie.

1. Qu'est-ce que la récursion

La récursion fait référence à une technique consistant à s'appeler pendant l'exécution du programme. Grâce à la récursivité, des problèmes complexes peuvent être simplifiés en problèmes simples, résolvant ainsi mieux le problème. Pour utiliser la récursion en PHP, vous devez clarifier les deux éléments de la récursion : la condition de fin récursive et l'expression récursive.

La condition de fin de récursion fait référence à la condition de jugement pour le moment où la récursion s'arrête. Cela fait généralement référence à l'atteinte d'une certaine profondeur, d'un état ou d'une certaine valeur. Durant le processus récursif, s’il n’y a pas de condition de fin, le programme tombera dans une boucle infinie.

L'expression récursive fait référence à la poursuite d'opérations récursives pendant le processus récursif. Normalement, les expressions récursives sont implémentées dans des fonctions récursives en appelant les fonctions elles-mêmes.

2. Comment utiliser la récursivité pour obtenir une classification infinie

Nous pouvons utiliser la récursivité pour obtenir une classification infinie. Plus précisément, nous pouvons définir une fonction récursive qui reçoit un paramètre, qui est un tableau représentant une liste de classification à un certain niveau. Les opérations récursives sont effectuées à l'intérieur de la fonction, et chaque catégorie est parcourue à tour de rôle. Si cette catégorie a des sous-catégories, les sous-catégories sont parcourues via la fonction récursive. À la fin du parcours, l’intégralité du tableau catégoriel est renvoyé.

L'implémentation spécifique est la suivante :

function infiniteCategory($data, $pid = 0, $level = 0)
{
    static $result = array();
    foreach ($data as $key => $value) {
        if ($value['parent_id'] == $pid) {
            $value['level'] = $level;
            $result[] = $value;
            infiniteCategory($data, $value['id'], $level + 1);
        }
    }
    return $result;
}
Copier après la connexion

L'analyse est la suivante :

(1) Cette fonction reçoit trois paramètres, l'un est le tableau de liste de classification $data, l'un est $pid dont l'ID parent est par défaut 0, et l'autre est $level dont le niveau par défaut est 0.

(2) Définissez une variable statique pour stocker le résultat final de la classification.

(3) Parcourez la liste des catégories à travers une boucle foreach Si le parent_id d'une catégorie est égal à $pid, cela signifie que la catégorie appartient au niveau actuel et est ajoutée au tableau de résultat final. $résultat.

(4) Appelez ensuite la fonction récursive, en passant l'identifiant de la catégorie actuelle comme $pid, et $level+1 comme niveau du niveau de classification suivant.

(5) Une fois le parcours terminé, renvoyez le tableau de résultats.

Testons-le :

$data = array(
    array('id' => 1, 'name' => '电脑', 'parent_id' => 0),
    array('id' => 2, 'name' => '手机', 'parent_id' => 0),
    array('id' => 3, 'name' => '笔记本', 'parent_id' => 1),
    array('id' => 4, 'name' => '台式机', 'parent_id' => 1),
    array('id' => 5, 'name' => '智能手机', 'parent_id' => 2),
    array('id' => 6, 'name' => '非智能手机', 'parent_id' => 2),
    array('id' => 7, 'name' => '微型笔记本', 'parent_id' => 3),
    array('id' => 8, 'name' => '超级台式机', 'parent_id' => 4),
    array('id' => 9, 'name' => '小型台式机', 'parent_id' => 4),
);

var_dump(infiniteCategory($data));
Copier après la connexion

Les résultats en cours d'exécution sont les suivants :

array(9) {
  [0]=>
  array(4) {
    ["id"]=>
    int(1)
    ["name"]=>
    string(6) "电脑"
    ["parent_id"]=>
    int(0)
    ["level"]=>
    int(0)
  }
  [1]=>
  array(4) {
    ["id"]=>
    int(3)
    ["name"]=>
    string(9) "笔记本"
    ["parent_id"]=>
    int(1)
    ["level"]=>
    int(1)
  }
  [2]=>
  array(4) {
    ["id"]=>
    int(7)
    ["name"]=>
    string(15) "微型笔记本"
    ["parent_id"]=>
    int(3)
    ["level"]=>
    int(2)
  }
  [3]=>
  array(4) {
    ["id"]=>
    int(4)
    ["name"]=>
    string(9) "台式机"
    ["parent_id"]=>
    int(1)
    ["level"]=>
    int(1)
  }
  [4]=>
  array(4) {
    ["id"]=>
    int(9)
    ["name"]=>
    string(18) "小型台式机"
    ["parent_id"]=>
    int(4)
    ["level"]=>
    int(2)
  }
  [5]=>
  array(4) {
    ["id"]=>
    int(8)
    ["name"]=>
    string(18) "超级台式机"
    ["parent_id"]=>
    int(4)
    ["level"]=>
    int(2)
  }
  [6]=>
  array(4) {
    ["id"]=>
    int(2)
    ["name"]=>
    string(6) "手机"
    ["parent_id"]=>
    int(0)
    ["level"]=>
    int(0)
  }
  [7]=>
  array(4) {
    ["id"]=>
    int(5)
    ["name"]=>
    string(12) "智能手机"
    ["parent_id"]=>
    int(2)
    ["level"]=>
    int(1)
  }
  [8]=>
  array(4) {
    ["id"]=>
    int(6)
    ["name"]=>
    string(15) "非智能手机"
    ["parent_id"]=>
    int(2)
    ["level"]=>
    int(1)
  }
}
Copier après la connexion

Vous pouvez voir que la liste des catégories a été convertie avec succès en Infinitus catégorie , selon la valeur du champ niveau, vous pouvez voir le niveau auquel se situe chaque classification.

3. Résumé

La méthode de réalisation de la classification Infinitus par récursion nous permet de compléter rapidement la fonction de classification dans le développement Web et a une grande flexibilité. Lorsque vous utilisez la récursivité, vous devez faire attention au réglage de la condition de fin, sinon vous risquez de tomber dans une boucle infinie.

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!

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