我创建了一个递归函数来获取产品的父产品。我几乎可以肯定我差不多了,但需要帮助从递归中解脱出来。
我正在寻找的结果是:
Product 1 (id:1, parent:none)
Product 2 (id:2, parent:1)
--- --- Product 3 (id:3, parent:2)
--- --- Product 4 (id:4, parent:2)
--- Product 5 (id:5, parent:1)
--- --- Product 6 (id:6, parent:5)
--- --- Product 7 (id:7, parent:5)
我的更新功能如下:
function get_parents ($pid, $found = array()) {
array_push ($found, $pid);
$sql = "SELECT * FROM products WHERE child_id = '$pid'";
$result = mysql_query($sql) or die ($sql);
if(mysql_num_rows($result)){
while($row = mysql_fetch_assoc($result)){
$found[] = get_parents($row['pid'], $found);
}
}
return $found;
}
我用简单的方法称呼它:
$parents = get_parents($pid);
我遇到的问题是,当我运行它时,它会创建一个无限循环,但不会中断。
我不想完成垃圾邮件,所以我已将数组的结果保存到文本文件中,可在此处查看http://vasa.co/array.txt
任何帮助都会受到重视: - )
答案 0 :(得分:2)
嗯..根据你的数据库结构判断,除非我遗漏了某些东西,否则看起来有点不对劲
声明
$sql = "SELECT * FROM products WHERE child_id = '$pid'";
告诉我,对于每种产品,您都要存储孩子的ID。通常,在基于树的结构中,相反,您存储父ID而不是子ID - 除非您希望子节点具有多个父节点。如果是这种情况,那么该功能很容易遇到问题。请考虑以下事项:
| ID | Child_ID |
+----+----------+
| 1 | 2 |
| 2 | 1 |
这会导致无限循环。如果存储parent_id,那么就这种性质而言,您将图形编码为分层。由于每个产品都有A父级,因此逻辑可以递归写入。
那么可以这样写吗?
function get_parents ($pid, $found = array()) {
array_push ($found, $pid);
$sql = "SELECT * FROM products WHERE id = '$pid'";
$result = mysql_query($sql) or die ($sql);
if(mysql_num_rows($result)){
while($row = mysql_fetch_assoc($result)){
$found[] = get_parents($row['parent_id'], $found);
}
}
return $found;
}