我创建了一个递归函数来获取产品的父产品。我几乎可以肯定我就快做到了,但是需要帮助我从递归中恢复过来。
我想要的结果是:
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
我们将非常感谢您的帮助:-)
发布于 2011-09-08 23:13:46
嗯..。从你的数据库结构来看,似乎有什么地方不对劲,除非我漏掉了什么
这句话
$sql = "SELECT * FROM products WHERE child_id = '$pid'";告诉我对于每个产品,您都存储了孩子的ID。通常,在基于树的结构中,情况正好相反,您存储的是父ID而不是子节点-除非您希望一个子节点具有多个父节点。如果是这种情况,那么这个函数很容易就会遇到问题。请考虑以下几点:
| ID | Child_ID |
+----+----------+
| 1 | 2 |
| 2 | 1 |这将导致无限循环。如果您存储parent_id,那么从本质上讲,您将对图进行分层编码。因为每个产品都有父元素,所以可以递归地编写逻辑。
然后可以这样写吗?
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;
}https://stackoverflow.com/questions/7334138
复制相似问题