PHP utilise la récursivité pour rechercher des données de manière hiérarchique (explication détaillée du code)

藏色散人
Libérer: 2023-04-08 11:10:01
avant
2889 Les gens l'ont consulté

PHP utilise la récursivité pour rechercher des données de manière hiérarchique (explication détaillée du code)

Aujourd'hui, nous introduisons principalement l'utilisation de la récursivité pour rechercher des données par niveau.

Le principe est assez simple. Il recherche principalement les enfants via une boucle niveau par niveau de l'ID parent. Il est également facile à implémenter en utilisant le code de boucle PHP. Cependant, s'il y a plus de niveaux, le principe est assez simple. plus PHP duplique le code. Vous pouvez utiliser la récursivité pour réaliser cette fonction.

1. Recherchez d'abord les données à utiliser et formez un tableau (évitez d'interroger la base de données de manière récursive, puis formez les données dont vous avez besoin en fonction de ce tableau)

Par exemple, récupérez le données suivantes :

$data = [
    ['id' => '1', 'pid' => '0', 'dsp' => '1'],
    ['id' => '2', 'pid' => '0', 'dsp' => '2'],
    ['id' => '3', 'pid' => '0', 'dsp' => '3'],
    ['id' => '4', 'pid' => '1', 'dsp' => '1-4'],
    ['id' => '5', 'pid' => '4', 'dsp' => '1-4-5'],
    ['id' => '6', 'pid' => '5', 'dsp' => '1-4-5-6'],
    ['id' => '7', 'pid' => '3', 'dsp' => '3-7'],
    ['id' => '8', 'pid' => '2', 'dsp' => '2-8'],
    ['id' => '9', 'pid' => '1', 'dsp' => '1-9'],
    ['id' => '10', 'pid' => '4', 'dsp' => '1-4-10'],
];
Copier après la connexion

2. Ensuite, utilisez la récursivité pour réorganiser les données afin que les données soient affichées hiérarchiquement.

/**
 * 根据父级id查找子级数据
 * @param $data     要查询的数据
 * @param int $pid 父级id
 */
public function recursion($data, $pid = 0)
{
    static $child = [];   // 定义存储子级数据数组
    foreach ($data as $key => $value) {
        if ($value['pid'] == $pid) {
            $child[] = $value;   // 满足条件的数据添加进child数组
            unset($data[$key]);  // 使用过后可以销毁
            $this->recursion($data, $value['id']);   // 递归调用,查找当前数据的子级
        }
    }
    return $child;
}
Copier après la connexion

Obtenez le résultat :

[
  {
    "id": "1",
    "pid": "0",
    "dsp": "1"
  },
  {
    "id": "4",
    "pid": "1",
    "dsp": "1-4"
  },
  {
    "id": "5",
    "pid": "4",
    "dsp": "1-4-5"
  },
  {
    "id": "6",
    "pid": "5",
    "dsp": "1-4-5-6"
  },
  {
    "id": "10",
    "pid": "4",
    "dsp": "1-4-10"
  },
  {
    "id": "9",
    "pid": "1",
    "dsp": "1-9"
  },
  {
    "id": "2",
    "pid": "0",
    "dsp": "2"
  },
  {
    "id": "8",
    "pid": "2",
    "dsp": "2-8"
  },
  {
    "id": "3",
    "pid": "0",
    "dsp": "3"
  },
  {
    "id": "7",
    "pid": "3",
    "dsp": "3-7"
  }
]
Copier après la connexion

3. Vous pouvez également utiliser la méthode suivante pour afficher un look plus superposé.

/**
 * 根据父级id查找子级数据
 * @param $data     要查询的数据
 * @param int $pid 父级id
 */
public function recursion($data, $pid = 0)
{
    $child = [];   // 定义存储子级数据数组
    foreach ($data as $key => $value) {
        if ($value['pid'] == $pid) {
            unset($data[$key]);  // 使用过后可以销毁
            $value['child'] = $this->recursion($data, $value['id']);   // 递归调用,查找当前数据的子级
            $child[] = $value;   // 把子级数据添加进数组
        }
    }
    return $child;
}
Copier après la connexion

Obtenez le résultat :

[
  {
    "id": "1",
    "pid": "0",
    "dsp": "1",
    "child": [
      {
        "id": "4",
        "pid": "1",
        "dsp": "1-4",
        "child": [
          {
            "id": "5",
            "pid": "4",
            "dsp": "1-4-5",
            "child": [
              {
                "id": "6",
                "pid": "5",
                "dsp": "1-4-5-6",
                "child": []
              }
            ]
          },
          {
            "id": "10",
            "pid": "4",
            "dsp": "1-4-10",
            "child": []
          }
        ]
      },
      {
        "id": "9",
        "pid": "1",
        "dsp": "1-9",
        "child": []
      }
    ]
  },
  {
    "id": "2",
    "pid": "0",
    "dsp": "2",
    "child": [
      {
        "id": "8",
        "pid": "2",
        "dsp": "2-8",
        "child": []
      }
    ]
  },
  {
    "id": "3",
    "pid": "0",
    "dsp": "3",
    "child": [
      {
        "id": "7",
        "pid": "3",
        "dsp": "3-7",
        "child": []
      }
    ]
  }
]
Copier après la connexion

Pour plus de connaissances sur php, veuillez visiter le tutoriel php !

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:
php
source:cnblogs.com
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