Php 为什么我的数组以空值开始?

Php 为什么我的数组以空值开始?,php,mysql,arrays,Php,Mysql,Arrays,我不能把我的头绕在这个上面 当我创建一个数组时,它以一个空值开始。数组中需要的值以秒开始 数组: Array ( [0] => [1] => Value 1 [2] => Value 2 [3] => Value 3 ) 代码: 如何将数组中的第一项设为值1?这是因为执行while循环try while循环 while($category=mysql_fetch_assoc($query2)){ array_push($categori

我不能把我的头绕在这个上面

当我创建一个数组时,它以一个空值开始。数组中需要的值以秒开始

数组:

Array ( 

 [0] => 

 [1] => Value 1 

 [2] => Value 2 

 [3] => Value 3

)
代码:


如何将数组中的第一项设为值1?

这是因为执行while循环try while循环

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

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

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

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

请尝试这样做:

$categories = array();
$query2 = mysql_query('SELECT * FROM books_categories');
while($r = mysql_fetch_array($query2)){
    $categories[] = $r['description'];
}

答案很简单:在读取第一行之前,您正在按第一个元素。正确的方法是使用前置条件循环:

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

while($category=mysql_fetch_assoc($query2)) {
    array_push($categories, $category['description']);
}
并且,请切换到使用PDO。

您首先将值(
array\u push()
)写入数组,然后实际获取值(
mysql\u fetch\u assoc()

您需要首先获取值,然后将其放入数组中

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

while循环是如何工作的

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

因此,在程序中发生了什么,在读取第一行之前,您正在按第一个元素

所以用while代替

wile循环将做什么?在流程图中,它将首先检查,然后进入循环体,所以在读取第一行之后,元素被推送

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

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

注意

  • 整个
    ext/mysql
    PHP扩展提供了所有以前缀mysql\uu命名的函数,现在已经并将在将来删除。因此请使用
    PDO
    MySQLi
  • 读得好


  • 您是最快的,速度太快了。尽管建议您这样做:
    while(($category=mysql\u fetch\u assoc($query2))!==false)
    。这将确保它不会在查询出错或没有行时崩溃。@Rune您的
    !==false
    位不是必需的;如果它等于false,它将与答案中的代码一起退出循环,因为
    $category
    将设置为false,这将在循环时终止
    @SDC,这取决于您的配置。在我的Web主机上,当没有行且我没有使用
    !==false时,它会出错。@Rune-请详细说明。我支持我之前的评论,即while循环应该在没有它的情况下退出,但我想知道您有什么配置会导致这种行为,以及它发生了什么错误我想你应该打开错误报告,看看有什么问题。@AlvinWong-这里不会有任何错误;这是一个逻辑问题,而不是语法或查询问题。@mrslipyFist-如果你想知道为什么一半的答案告诉你停止使用
    mysql\u xx()
    函数,这是因为它们已被弃用,不推荐使用。有关详细信息和如何处理,请参阅。@SDC OK,你赢了。这将是一个通知,而不是错误。最佳答案。它有一个流程图,一个文本说明,它提到了API的弃用…你还需要什么?@mauris-这里有人不喜欢我看到的空格:-)虽然我删除了3个空格,但我为缩进添加了4个其他空格。因为-3+4=1,你可以说我仍然喜欢空格。@maurius我同意你的等式并接受你的答案。你现在可以飞走了:D
    $categories = array();
    $query2 = mysql_query("SELECT * FROM books_categories");
    
    while($category=mysql_fetch_assoc($query2)) {
        array_push($categories, $category['description']);
    }