我正在使用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递归会让我的想法更加震撼......
任何帮助都非常感激。
答案 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;
}