【问题标题】:PHP Recursive Function to Retrieve List of Sub Categories检索子类别列表的 PHP 递归函数
【发布时间】:2015-12-15 14:50:18
【问题描述】:

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

给定一个 category_id,我将无法按一定百分比更新所有产品的价格。

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

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

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 递归都让我有点吃惊......

非常感谢任何帮助。

【问题讨论】:

  • 如何退出递归?另外,您如何将结果传递给其他函数?你的参数列表中没有它
  • 那么这里有什么问题..函数似乎没问题..你只需要用$categories = $this->getTree(0);调用它
  • 问题是这给了我一个树结构,我只想要一个简单的列表/数组(见上面的编辑),谢谢
  • 那么你想递归地获取所有父ID的数组吗?
  • 是的,所有 category_id 的数组,我猜在底层,他们将是没有任何子类别的父母......所以是的。

标签: php recursion opencart


【解决方案1】:

您似乎想要一个带有子类别 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;
}

【讨论】:

  • 是的,就是那个...我已将 $this-> 添加到递归函数调用中...谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-11-24
  • 2020-04-14
  • 2016-07-18
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
相关资源
最近更新 更多