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 を続行する必要があるだけです。

可能?

& here -> を追加しようとし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 に答える
-1

同様の問題に対して、私は常に 2 つの異なる配列を使用してきました。このようなコードは、すべての ID に対して 1 回だけクエリを実行できます。配列+ foreachが1つだけでは不可能だと思います。

次のコードは非常に単純です。新しい 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 に答える