0

我希望在大量 ID 上运行 foreach。但是,foreach 中的每个项目都是一个选择查询,如果它找到更多 ID,则需要将它们添加到在 foreach 中运行的数组中。例如

$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),因为这里的其他人在类似的问题中提出了建议。这似乎不起作用。

4

4 回答 4

0

foreach实际上,虽然您的数组的副本要循环,但您将需要使用while.

while(list($id_key, $id) = each($ids)){
    //your code
    $ids[] = $row[id];
}
于 2013-09-23T16:08:14.370 回答
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++;   
}
于 2013-09-23T16:08:37.153 回答
0

您应该能够仅引用原始数组,即

   foreach ($query2->result_array() as $row)
     {
       $id[] = $row;
     }

这将自动为新的数组元素分配一个自动递增的键并将其添加到 $id 数组中。我想这就是你所追求的。

于 2013-09-23T16:02:32.683 回答
-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);
于 2013-09-23T16:26:29.280 回答