2012-08-06 85 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