2013-09-23 7 views
0

ID가로드되면 foreach를 실행하고 싶습니다. 그러나 foreach의 각 항목은 선택 쿼리이며 더 많은 ID를 찾으면 foreach에서 실행중인 배열에 추가해야합니다. 예컨대배열에서 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']); 
     } 
    } 

이 분명히 의사 그래서 난 그냥 더 ID 년대를 발견하면 계속 foreach는 필요한 내 SQL 등을 보정 할 필요가 없습니다.

가능합니까?

&을 여기에 추가하려고 시도했습니다. ->foreach($ids as &$id) 다른 누군가가 비슷한 질문에서 제안 했으므로 시도했습니다. 이것은 효과가없는 것 같습니다.

+1

왜 모든 ID를 한 번에 가져올 수 없습니까? – cguedel

+0

항목을 조건부로 저장해야하는 다중 레벨 데이터베이스입니다. –

답변

0

foreach 실제로 배열의 복사본을 루프로 만듭니다. while을 사용해야합니다.

while(list($id_key, $id) = each($ids)){ 
    //your code 
    $ids[] = $row[id]; 
} 
0

당신은 단순히 자동으로 자동 할당합니다

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

이, 즉 원래의 배열을 참조 할 수 있어야는 새로운 배열 요소에 키를 증가하고 $ ID 배열에 추가합니다. 나는 이것이 당신이 겪은 일이라고 생각합니다.

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++; 
} 
-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);