2012-08-06 61 views
0

我正在創建一個班級書籍列表 - 這裏有一個書籍主列表以及該班級可以分配的書籍列表。我需要創建主列表的數組,刪除已分配給該類的書籍,然後創建剩餘書籍的選擇列表。我大部分工作,但我堅持一小部分。 首先,我加載陣列(該book_id是關鍵,BOOK_TITLE是價值):Foreach鍵不遞增

while ($master_book = mysql_fetch_array($big_book_list)) { 
$b_id = $master_book['master_book_list_id']; 
$book_list[$b_id] = $master_book['book_title']; 
} 

然後我刪除類的主簿(它已經被設置):

unset($book_list[$primary_book]); 

現在我加載的已經被分配了二次書籍陣列(原發性和繼發性的書籍都來自相同的列表):

$secondary_query = "select * from class_books cb, master_book_list mbl where class_id ='$class_id' and cb.book_id = mbl.master_book_list_id;"; 
$secondary_list = mysql_query($secondary_query); 

現在我從secondary_list $從t取出書他主要列表:

while ($secondary_book = mysql_fetch_array($secondary_list)) { 
    $b_id = $secondary_book['book_id']; 
    unset($book_list[$b_id]); 
} 

在這一點上,print_r正確顯示我的數組。但是這個代碼:

foreach ($book_list as $book2) { 
    $the_key = key($book_list); 
    echo $the_key . ' and book2 is '. $book2 . '<br/>'; 
} 

它會遍歷預測的次數,但在同一價值的關鍵支柱(這是「2」,數組中的第一個值

任何人都可以看到的。我做錯了

+0

** **警告你的代碼可能會受到SQL注入攻擊 – 2012-08-06 18:18:17

+0

你不是說要使用$ book2 ins在那個循環中的書單? – 2012-08-06 18:23:01

+0

你應該停止使用'mysql_ *'函數。他們正在被棄用。請使用[PDO](http://php.net/manual/en/book.pdo.php)(自PHP 5.1起支持)或[mysqli](http://php.net/manual/en/book)。 mysqli.php)(自PHP 4.1起支持)。如果你不確定使用哪一個,[閱讀這篇文章](http://stackoverflow.com/questions/13569/mysqli-or-pdo-what-are-the-pros-and-cons)。 – Matt 2012-08-06 18:23:56

回答

3

你可以抓住從foreach循環的關鍵:?

foreach ($book_list as $the_key => $book2) { 
    echo $the_key . ' and book2 is '. $book2 . '<br/>'; 
} 
+0

好吧,那很簡單:)正是我所需要的,我可以在10分鐘內將此標記爲「答案」。謝謝! – ini 2012-08-06 18:22:34

+0

@ini這個*在* foreach循環的php文檔中有詳細說明。 (http://php.net/manual/en/control-structures.foreach.php) – Matt 2012-08-06 18:24:50