PHP verwendet Rekursion, um Daten hierarchisch zu finden (detaillierte Code-Erklärung)

藏色散人
Freigeben: 2023-04-08 11:10:01
nach vorne
2885 Leute haben es durchsucht

PHP verwendet Rekursion, um Daten hierarchisch zu finden (detaillierte Code-Erklärung)

Heute stellen wir hauptsächlich die Verwendung der Rekursion vor, um Daten nach Ebenen zu finden.

Das Prinzip ist recht einfach. Es wird hauptsächlich über eine Level-für-Level-Schleife der übergeordneten ID gesucht. Es ist jedoch auch einfach, es mit PHP-Schleifencode zu implementieren mehr PHP dupliziert den Code. Sie können diese Funktion durch Rekursion erreichen.

1. Ermitteln Sie zunächst die zu verwendenden Daten und bilden Sie ein Array (vermeiden Sie eine rekursive Abfrage der Datenbank und bilden Sie dann die benötigten Daten basierend auf diesem Array)

Erhalten Sie beispielsweise die Folgende Daten:

$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'],
];
Nach dem Login kopieren

2. Als nächstes verwenden Sie die Rekursion, um die Daten neu zu organisieren, sodass die Daten hierarchisch angezeigt werden.

/**
 * 根据父级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;
}
Nach dem Login kopieren

Ergebnis erhalten:

[
  {
    "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"
  }
]
Nach dem Login kopieren

3. Sie können auch die folgende Methode verwenden, um ein mehrschichtiges Erscheinungsbild anzuzeigen.

/**
 * 根据父级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;
}
Nach dem Login kopieren

Erhalten Sie das Ergebnis:

[
  {
    "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": []
      }
    ]
  }
]
Nach dem Login kopieren

Weitere PHP-Kenntnisse finden Sie im PHP-Tutorial!

Das obige ist der detaillierte Inhalt vonPHP verwendet Rekursion, um Daten hierarchisch zu finden (detaillierte Code-Erklärung). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage