2013-07-12 3 views
0

데이터를 mssql 데이터베이스에서 두 번 가져와 반복해야하지만 PHP가 처음 foreach 루프를 수행 할 때 배열 포인터가 이동하면 배열이 비어있는 것으로 나타납니다 전체 배열을 통해. 기능을 얻을동일한 데이터에서 두 개의 foreach 루프 수행

$rstGold = $rstGold2 = getFeatured(); 

foreach($rstGold as $store){ 
//proccessing here 
} 

foreach($rstGold2 as $store){ 
//proccessing here 
} 

는 MSSQL-PDO 드라이버를 사용하여 결과를 반환하는 SQL 쿼리입니다 : 본질적으로

나는이 있습니다.

function getFeatured(){ 
      global $db, $debug; 

      $query = //sql query 

      return $db->query($query); 
} 

getFeatured() 결과를 같은 순서로 두 번 반복하는 방법이 필요합니다. 내 SQL 쿼리는 두 번째 SQL 쿼리를 수행 할 수 없도록 결과를 무작위로 추출합니다.

이 글을 쓰면서 같은 루프에서 모든 처리를 수행하는 방법을 찾았지만 여전히이 작업을 수행하는 가장 좋은 방법이 무엇인지 알고 싶습니다.

+3

foreach는 원래 배열을 변경하지 않으므로 루프 내부에 문제가있는 것이므로 코드가 표시되지 않습니다. –

+0

'foreach'는 실제로 첫 번째 반복에서 배열을 재설정하므로 두 번째'foreach' 루프가 다음과 같이 작동해야합니다. 예정된. 더 많은 코드를 게시 할 수 있습니까? – binnyb

+0

루프 내에서 내가했던 모든 작업은 print 문이었습니다. – LT999

답변

2

사용 ArrayIterator, 워드 프로세서 당 :

같은 배열을 통해 당신이 ArrayObject를 인스턴스화하고 foreach 문을 사용하여 하나 그것을 참조 ArrayIterator 인스턴스 을 만들 수 있도록 을 필요로 여러 번 반복 할 또는 getIterator() 메소드를 수동으로 호출하여 호출 할 수 있습니다.

는 그리고 그 예는 다음과 같습니다

<?php 
$fruits = array(
    "apple" => "yummy", 
    "orange" => "ah ya, nice", 
    "grape" => "wow, I love it!", 
    "plum" => "nah, not me" 
); 
$obj = new ArrayObject($fruits); 
$it = $obj->getIterator(); 

// How many items are we iterating over? 

echo "Iterating over: " . $obj->count() . " values\n"; 

// Iterate over the values in the ArrayObject: 
while($it->valid()) 
{ 
    echo $it->key() . "=" . $it->current() . "\n"; 
    $it->next(); 
} 

// The good thing here is that it can be iterated with foreach loop 

foreach ($it as $key=>$val) 
echo $key.":".$val."\n"; 

클래스는 다음과 같이 method to reset the pointer to the beginning 사용, rewind라고 있습니다 도움이

$iterator = $arrayobject->getIterator(); 

$iterator->next(); 
echo $iterator->key(); //1 

$iterator->rewind(); //rewinding to the begining 

희망을.

관련 문제