12

我无法绕过这个。

当我创建一个数组时,它以一个空值开头。需要在数组中的值从第二个开始。

大批:

Array ( 

 [0] => 

 [1] => Value 1 

 [2] => Value 2 

 [3] => Value 3

)

代码:

$categories = array();
$query2 = mysql_query("SELECT * FROM books_categories");
do{
    array_push($categories, $category['description']);
}while($category=mysql_fetch_assoc($query2));

如何使数组中的第一项成为值 1?

4

6 回答 6

21

这是因为 do while 循环 try while 循环

while($category=mysql_fetch_assoc($query2)){
    array_push($categories, $category['description']);
}
于 2012-12-19T12:24:23.580 回答
14

答案很简单:在读取第一行之前先推送第一个元素。正确的做法是使用前置条件循环:

$categories = array();
$query2 = mysql_query("SELECT * FROM books_categories");

while($category=mysql_fetch_assoc($query2)) {
    array_push($categories, $category['description']);
}

并且,请切换到使用 PDO。

于 2012-12-19T12:25:26.097 回答
12

while循环如何工作

在此处输入图像描述

与常规 while 循环的主要区别在于,do-while 循环的第一次迭代保证运行(真值表达式仅在迭代结束时检查),而它不一定与常规 while 循环一起运行(在每次迭代开始时检查真值表达式,如果它从一开始就计算为 FALSE,则循环执行将立即结束)。资源

所以在你的程序中发生了什么,你在阅读第一行之前推送了第一个元素。

所以改用while

什么诡计循环会做什么?如流程图所示,它将首先检查而不是进入循环体,因此元素在读取第一行后被推送

$categories = array();
$query2 = mysql_query("SELECT * FROM books_categories");

while($category=mysql_fetch_assoc($query2)) {
    array_push($categories, $category['description']);
}

笔记

  1. 整个ext/mysqlPHP 扩展提供了所有以 mysql_ 为前缀的函数,从 PHP v5.5.0 开始正式弃用,并将在未来删除。所以使用PDO或者MySQLi

好读

  1. 不推荐使用 mysql 扩展并将在将来删除:请改用 mysqli 或 PDO
于 2012-12-19T12:30:29.130 回答
5

因为您应该使用 while 循环而不是 do-while 循环。

while($category = mysql_fetch_assoc($query2)) {
    array_push($categories, $category['description']);
}

在您的代码中,而不是在循环的第一次迭代中(第一次进入 do 块时),$category未设置因此将第一个数组值设置为空。

于 2012-12-19T12:24:39.403 回答
5

您首先将值 ( array_push()) 写入数组,然后实际获取值 ( mysql_fetch_assoc())。

您需要获取该值,然后将其放入您的数组中!

$categories = array();
$query2 = mysql_query("SELECT * FROM books_categories");
while(($category = mysql_fetch_assoc($query2)) !=== false) {
    array_push($categories, $category['description']);
}
于 2012-12-19T12:25:57.960 回答
1

尝试这样做:

$categories = array();
$query2 = mysql_query('SELECT * FROM books_categories');
while($r = mysql_fetch_array($query2)){
    $categories[] = $r['description'];
}
于 2012-12-19T12:25:06.970 回答