PHP 递归函数 - 如何避免使用全局变量
PHP Recursive Function - How To Avoid Using A Global Variable
我创建了一个函数,该函数 returns 所选父代的后代的数据数组。
首先,它会检查我们已将其 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 是全局的,该函数不再是 returns 完整的家族血统,只有我们最初输入的父 $uuid 的直系后代功能。
有没有人知道如何在数组不是全局的情况下进行这项工作?
提前致谢。
您可以 return 递归调用的数组结果和数组在父级调用中合并它们。
<?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;
}
更新:
我建议您查看 查询以避免通过对数据库服务器的数据库查询调用进行往返。
我创建了一个函数,该函数 returns 所选父代的后代的数据数组。
首先,它会检查我们已将其 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 是全局的,该函数不再是 returns 完整的家族血统,只有我们最初输入的父 $uuid 的直系后代功能。
有没有人知道如何在数组不是全局的情况下进行这项工作?
提前致谢。
您可以 return 递归调用的数组结果和数组在父级调用中合并它们。
<?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;
}
更新:
我建议您查看