0

如果这是愚蠢的,仍然只是学习 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

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

4

1 回答 1

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;
于 2013-05-20T16:20:25.757 回答