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 参考页面。基本上它说任何&前面有 a 的函数参数都将通过引用而不是值传递。

于 2013-03-15T08:07:30.790 回答
1

$categories only exists in the scope of get children. You could either pass it by reference as second parameter or create get children as a closure with use (&$categories)

于 2013-03-15T08:09:45.680 回答
0

function getChildren($id, $categories)

应该管用。

该数组超出范围,因此该函数没有触及您要返回的那个。它在函数内部创建了一个新的本地 $categories。

于 2013-03-15T08:06:46.593 回答