2010-05-09 28 views
1

Я пытаюсь сделать очень базовый php ORM как для школьного проекта. У меня почти все работает, но я пытаюсь сопоставить результаты с массивом. Вот фрагмент кода, который, надеюсь, поможет мне объяснить.Пока петля в петле foreach правильная петля

$results = array(); 

foreach($this->columns as $column){ 

    $current = array(); 

    while($row = mysql_fetch_array($this->results)){ 
     $current[] = $row[$column]; 
     print_r($current); 
     echo '<br><br>'; 
    } 

    $results[$column] = $current; 

} 

print_r($results); 

return mysql_fetch_array($this->results); 

Это работает, но цикл while работает только в первом столбце. The print_r($results); показывает следующее:

Array ([testID] => Array ([0] => 1 [1] => 2) [testName] => Array () [testData] => Array ()) 

Может кто-нибудь пролить некоторый свет? Спасибо заранее!

+0

Не может видеть необходимость идти через колонки вручную, в 'флаг MYSQL_ASSOC' на' mysql_fetch_array' даст вам массив с именами столбцов в любом случае. – Mike

ответ

4

Это потому, что вы уже принес каждую строку, и внутренний указатель в конце. В следующий раз mysql_fetch_array() немедленно вернет false. Вы можете сбросить указатель на первую строку:

mysql_data_seek($this->results, 0); 

Put это как раз перед

while($row = mysql_... 
+0

Спасибо, кучи! полностью его исправил! Только один вопрос: есть ли эквивалент при переходе через вложенный массив? –

0

Я не уверен, что вы можете использовать оператор -> в имени переменной. Как вы пытаетесь получить ключ и значение из столбцов массива $? Если да, то вы хотите что-то вроде этого:

foreach($columns as $k => $v) { 
//in here, $k is the name of the field, and $v is the associated value 

}