我創建了一個函式,該函式回傳所選父項的后代的資料陣列。
首先,它檢查我們提供給它的 UUID 的父級的子級,然后檢查這些子級的進一步子級,依此類推,最終回傳所選父級譜系中所有用戶的陣列。
Example of my DB Table
**id, name, uuid, parent**
1, John, 0001, none
2, Steve, 0002, 0001
3, Mark, 0003, 0001
4, Kevin, 0004, 0002
5, Adam, 0005, 0003
function checkForChildren($uuid, $conn){
global $familyArray;
$sql = "SELECT id, uuid, name FROM people WHERE parent = '".$uuid."'";
$result = mysqli_query($conn, $sql);
/*-- Data has been found --*/
if (mysqli_num_rows($result) > 0){
foreach ($result as $row){
$familyArray[]=
[
'id' => $row['id'],
'uuid' => $row['uuid'],
'name' => $row['name']
];
checkForChildren($row['uuid'],$conn);
}
}
return $familyArray;
}
該代碼與$familyArray 作為全域變數一起作業得很好,但我已經明白使用全域變數不是一個好習慣。
如果$familyArray 不是全域的,該函式將不再回傳完整的家族譜系,僅回傳我們最初提供給函式的父 $uuid 的直接后代。
有沒有人知道如何在沒有全域陣列的情況下進行這項作業?
提前致謝。
uj5u.com熱心網友回復:
您可以從遞回呼叫中回傳陣列結果,并在父級呼叫中將它們合并到陣列中。
<?php
function checkForChildren($uuid, $conn){
$familyArray = [];
$sql = "SELECT id, uuid, name FROM people WHERE parent = '".$uuid."'";
$result = mysqli_query($conn, $sql);
foreach ($result as $row){
$familyArray[] = [
'id' => $row['id'],
'uuid' => $row['uuid'],
'name' => $row['name']
];
$familyArray = array_merge($familyArray,checkForChildren($row['uuid'],$conn));
}
return $familyArray;
}
更新:
我建議您查看with recursive cte查詢,以避免通過對資料庫服務器的資料庫查詢呼叫進行往返。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/370441.html
