PHP递归函数检索子类别列表

时间:2015-12-15 14:50:19

标签: php recursion opencart

我正在使用Opencart。类别存储在category表格中,其中主键为category_id,字段parent_id表示父类别。

鉴于category_id,我无法按一定比例更新所有产品的价格。

如果我可以获得所有category_ids的列表,这些category_id是子类别或子子类别或sub-sub-sub等,那么使用它们来运行价格更新应该相当直接。

我知道有很多构建php数组树结构的例子,其递归函数类似于this

public function getTree($parent_category_id) {
    $arr = array();
    $sql = "select * from bs_category where parent_id = '$parent_category_id'";
    $query = $this->db->query($sql);
    foreach ($query->rows as $row) {
       $arr[] = array(
         "Parent" => $row["category_id"],
         "Children" => $this->getTree($row["category_id"])
       );
     }
     return $arr;
  }

但这给了我一个形式为

的树形结构
Array
(
    [0] => Array
        (
            [Parent] => 568
            [Children] => Array
                (
                    [0] => Array
                        (
                            [Parent] => 571
                            [Children] => Array
                                (
                                    [0] => Array
                                        (
                                            [Parent] => 572
                                            [Children] => Array
                                                (
                                                )

                                        )

                                )

                        )

                )

        )

尽管我想要的只是一个简单的列表,例如。

array(568, 571, 572)

我似乎无法获得所有category_ids的简单列表,而没有奇怪的重复等等... tbh递归会让我的想法更加震撼......

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:2)

您似乎想要一个带有子类别ID的简单一维数组(例如一个列表),您当前正在构建的是一个树(嵌套数组)。这应该是诀窍:

public function getList($parentId)
{
    $retVal = array($parentId);

    $query = "SELECT * FROm `bs_category` WHERE `parent_id` = ".$parentId;
    $result = $this->db->query($query);

    foreach($result->rows as $row)
    {
        $retVal = array_merge($retVal, $this->getList($row["category_id"]));
    }

    return $retVal;
}