php返回数组函数返回NULL

时间:2013-05-20 16:18:41

标签: php arrays function return hierarchy

仍然只是学习PHP,如果这是愚蠢的抱歉!我有一个循环通过mysql邻接表的函数。我想将此作为数组返回。看起来很好,因为如果我在函数中返回我执行print_r($ path);其中$ path是函数内部的数组,数组按我的意愿打印。

问题是我无法理解为什么我无法通过

访问它
$patharray = functioncalled($vars);

我尝试过使用return $ path;并且数组中只有print_r,但它会一直返回NULL

function getParPath($mysqli, $showpar, $path) {
    // Get Parent Path
    $query ="select loc_id, loc_name, loc_parent from locations where loc_id = ? LIMIT 0,1";
    if ($stmt = mysqli_prepare($mysqli, $query)) {

        /* pass parameters to query */
        mysqli_stmt_bind_param($stmt, "s", $showpar);

        /* run the query on the database */
        mysqli_stmt_execute($stmt);

        /* store result */
        mysqli_stmt_store_result($stmt);

        /* assign variable for each column to store results in */
        mysqli_stmt_bind_result($stmt, $loc_id, $loc_name, $loc_parent);

        /* fetch values */
        while (mysqli_stmt_fetch($stmt)) {

            $path[] = $loc_name;

            if ($loc_parent !='0'){
                getParPath($mysqli, $loc_parent, $path);
            }
            if ($loc_parent =='0'){
                $path = array_reverse($path);
                return $path; // uncommented per answers below.
                //print_r($path); //commented out per answers below.
            }

        }
    }
}

$patharray = getParPath($mysqli, $showcld, $path);
//print_r(getParPath($mysqli, $showcld, $path)); // removed per answers below
var_dump($patharray); //removed echo per answers below
exit;

返回:

Array
(
    [0] => BuildingA
    [1] => FloorA
    [2] => RoomA
)
Array
(
    [0] => BuildingA
    [1] => FloorA
    [2] => RoomA
)
NULL

从最后一行可以看出,我设置为函数调用的数组$patharrayNULL。如果我在函数内部尝试print_r,则会打印一个数组,如果我直接尝试print_r函数,它将返回一个数组。但不是我可以使用的对象。

1 个答案:

答案 0 :(得分:3)

您必须return $path;而不仅仅是echoprint_r

$path = array_reverse($path);
return $path;  //Uncomment this line
//print_r($path); //Comment out this line

您还需要更改此项,您没有将$ path设置为等于结果:

if ($loc_parent !='0'){
    $path = getParPath($mysqli, $loc_parent, $path);
}

还要摆脱if测试,因为它会一直运行直到它到达底部然后你需要返回。

if ($loc_parent !='0'){
    $path = getParPath($mysqli, $loc_parent, $path);
}
$path = array_reverse($path);
return $path;