我想知道是否有可能给foreach数组添加值以保持它的运行,直到它不能再运行为止。这是一个简单的线程式留言板系统,当一个帖子被删除,它也删除了它下面的所有帖子。
我找到了一个foreach循环,它将posts放在它下面,并将它们添加到数组的末尾,以保持它的运行,直到行数用完为止,这是可行的,但我似乎无法让它继续遍历所有的行。
当前代码为:
foreach ($deleterows as $key => &$value) {
$sql = "SELECT id FROM posts WHERE replyto='$value'";
$query = mysqli_query($con,$sql) or die("cannot select next posts");
while ($newrow = mysqli_fetch_array($query)) {
array_push($deleterows,$newrow['id']);
}
}
第一个$deleterows是一个数组,包含所有回复我试图删除的帖子的帖子的ID。然后,对于每一篇文章,它都应该搜索数据库以找到该文章的回复,并将其添加到$row数组的末尾以保持其正常运行,直到它有一个要删除的所有文章的完整列表。
我正在尝试的测试岗位如下:
Post 53
-Post 54
--Post 55
---Post 56
-Post 57
--Post 58
54号和57号帖子是对主要帖子的答复,其他的则是对它们的答复。
当我尝试删除post 53时,$row数组将包含53、54、55、56,但是仍然不会得到第57或58行。谷歌之类的,就是想不出来。
最佳答案
您可以尝试如下递归操作:
function delete($deleterows) {
global $con;
foreach ($deleterows as $key => &$value) {
$sql = "SELECT id FROM posts WHERE replyto='$value'";
$query = mysqli_query($con,$sql) or die("cannot select next posts");
$tmpdeleterows = array();
while ($newrow = mysqli_fetch_array($query)) {
$tmpdeleterows[]=$newrow['id'];
}
if(!empty($tmpdeleterows)) {
delete($tmpdeleterows);
}
}
}
所有的id都被添加到一个临时数组中,然后发送到同一个要处理的函数中。
我添加了global$con行,假设您的数据库连接在全局范围内,如果不是,您可以将其作为参数传递。
关于php - PHP为原始的foreach数组增加值(value)以保持其发展,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25496772/