PHP递归函数中的array_push

时间:2016-08-10 11:01:24

标签: php arrays function parent-child

我正在尝试从子ID中获取所有父ID

我有像这样的数据库结构

folder db
id parent_id name
1   0        myfolder
2   1        usa
3   2        new york
4   3        people
5   0        myfolder2

现在我的文件夹ID为4 我需要找到最后一个parent_id,即对于id 4它应该返回 一个数组中的3,2,1

得到这个结果我正在使用递归函数

function folder_has_parent($parent,$conobj,$array) {
    $return = array();
        $selectparent = "select * from pictures_folder where id = $parent ";

        $folderResult = mysqli_query($conobj,$selectparent);
        $folderRow = mysqli_fetch_assoc($folderResult);
        $parent_id = $folderRow['parent_id'];


        if ($parent_id != 0) {

            array_push($return,$parent_id);
            print_r($return);
            /* 
            every time array gets new values i want it should merge into single array and return
            Array
            (
            [0] => 3
            )
            Array
            (
            [0] => 2
            )
            Array
            (
            [0] => 1
            )
             */
            $a = folder_has_parent($parent_id, $conobj,$array);

        }
    return $return;
}

if(isset($folderId)){
    $array = array();
    $array =  folder_has_parent($folderId ,$conobj ,$array);
    print_r($array);
    // here i m getting return array as 
        Array
        (
        [0] => 3
        )
} 

我使用array_push在数组中存储值,但是它已经过了

2 个答案:

答案 0 :(得分:0)

您必须使用全局变量,否则它将始终返回具有最后一个值的数组。因为当你进行函数调用时它将初始化数组并且对于递归函数调用它将表现为相同并且每次初始化新数组。

 array_push($GLOBALS['return'],$parent_id);

一旦完成所有进程不需要返回数组,您就可以返回true,因为它是全局的,您也可以在外部获取它。 在外面打印$ return,你会得到你想要的结果。

答案 1 :(得分:0)

它的nesned函数,但你在每个循环中重置数组,你能尝试这样吗,

function folder_has_parent($parent,$array) {

$selectparent = "select * from pictures_folder where id = $parent ";

$folderResult = mysqli_query($conobj,$selectparent);
$folderRow = mysqli_fetch_assoc($folderResult);
$parent_id = $folderRow['parent_id'];

if ($parent_id != 0) {
    $array[] = $parent_id;
    folder_has_parent($parent_id,$array);
}

return $array;
}

if(isset($folderId)){
$array = array();
$array =  folder_has_parent($folderId ,$array);
print_r($array);

}