我希望在ID的负载上运行foreach。 但是foreach中的每个项都是一个select查询,如果找到更多的ID,则需要将它们添加到foreach中运行的数组中。 E.g
$ids = array();
foreach($ids as $id)
{
SELECT id FROM table WHERE otherid = $id;
foreach ($query2->result_array() as $row)
{
array_push($array, $row['id']);
}
}
这显然是伪代码,因此无需更正我的SQL等。如果它找到更多ID,我只需要foreach继续。
可能的?
我试过添加&这里 - > foreach($ids as &$id)
正如此处的其他人在类似的问题中提出的那样。这似乎不起作用。
答案 0 :(得分:0)
你应该只能引用原始数组,即
foreach ($query2->result_array() as $row)
{
$id[] = $row;
}
这将自动为新数组元素分配一个自动递增的键,并将其添加到$ id数组中。我认为这就是你所追求的目标。
答案 1 :(得分:0)
foreach
实际上会使您的数组副本循环播放,您需要使用while
。
while(list($id_key, $id) = each($ids)){
//your code
$ids[] = $row[id];
}
答案 2 :(得分:0)
尝试使用变量进行迭代:
$ids = array();
$i = 0;
while ($i < count($ids)) {
$query2->query(SELECT id FROM table WHERE otherid = $ids[$i]);
foreach ($query2->result_array() as $row)
$ids []= $row['id'];
$i++;
}
答案 3 :(得分:-1)
对于类似的问题,我总是使用两个不同的数组。这样的代码只能对每个id运行一次查询。我认为只有一个数组+ foreach是不可能的;
以下代码非常简单。它会一直找到新的ID,直到没有新的ID。
$ids = array();
$new = array();
$new = $ids;
do {
foreach($new as $n) {
$new = array();
//// HERE PUT YOUR CODE TO RUN A QUERY AND MAYBE PUSH A NEW ID TO $new \\\\
}
$ids = array_merge($ids,$new);
} while (count($new)!==0);