今天主要介紹一下使用遞歸來按層級查找數據。
原理挺簡單的,主要是通過父級id一級一級的循環查找子級,使用PHP循環代碼也很容易實現,不過如果層級越多,PHP重復代碼也越多,這時可以使用遞歸來實現這功能。
1、首先查出要使用的數據組成一個數組(避免遞歸里查詢數據庫,之后根據這個數組組成自己需要的數據就可以了)
比如得到如下數據:
$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'],
];
2、接下來使用遞歸重組數據,使數據按層級顯示。
/**
* 根據父級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;
}
得到結果:
[
{
"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"
}
]
總結
以上所述是小編給大家介紹的PHP使用遞歸按層級查找數據的方法,希望對大家有所幫助!
您可能感興趣的文章:- php函數mkdir實現遞歸創建層級目錄
- PHP遞歸實現層級樹狀展開