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