5

私はこれに対する解決策を見つけることができませんでした、そして私はこれのために多くの時間がありません。ですから、私が欲しいのは、カテゴリIDを指定して、子カテゴリであるカテゴリのすべてのIDを返す関数を作成することです。

function getID($var) {
    $categories = array();

    function getChildren($id) {
        $result = mysql_query("SELECT * FROM categories WHERE parentID = '$id'");
        echo "<ul>";
        while ($row = mysql_fetch_array($result)) {
            echo "<li><a>{$row['ID']}</a>";
            $categories[] = $row['ID'];
            getChildren($row['ID']);
            echo "</li>";
        }
        echo "</ul>";
    }

    getChildren($var);
    return $categories;
}

すべてを$categories配列に格納したくありません。$ varは、私が関数に与えるカテゴリIDです。この関数を呼び出すと、必要なもののリストが正確に出力されますが、配列は空です。

4

3 に答える 3

11

スコープに問題があるようです。これを試して:

function getChildren(&$categories, $id) {
  $result = mysql_query("SELECT * FROM categories WHERE parentID = '$id'");
  echo "<ul>";
  while ($row = mysql_fetch_array($result)) {
    echo "<li><a>{$row['ID']}</a>";
    $categories[] = $row['ID'];
    getChildren($categories, $row['ID']);
    echo "</li>";
  }
  echo "</ul>";
}

function getID($var) {
  $categories = array();

  getChildren($categories, $var);
  return $categories;
}

これは、値ではなく参照で渡す方法を説明するPHPリファレンスページです。基本的に&、前にが付いている関数パラメーターは、値ではなく参照によって渡されると言われています。

于 2013-03-15T08:07:30.790 に答える
1

$ categoryは、getchildrenのスコープにのみ存在します。参照によって2番目のパラメーターとして渡すか、getchildrenをクロージャーとして作成することができます。use (&$categories)

于 2013-03-15T08:09:45.680 に答える
0

function getChildren($id, $categories)

動作するはずです。

配列がスコープ外だったため、関数は返される配列に触れませんでした。関数内に新しいローカル$categoriesを作成しました。

于 2013-03-15T08:06:46.593 に答える