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;
}

更新:

我建议您查看 查询以避免通过对数据库服务器的数据库查询调用进行往返。