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

MrS*_*ist 12 php mysql arrays

我无法绕过这一个.

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

阵:

Array ( 

 [0] => 

 [1] => Value 1 

 [2] => Value 2 

 [3] => Value 3

)
Run Code Online (Sandbox Code Playgroud)

码:

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

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

sen*_*enK 21

这是因为while while循环尝试while循环

while($category=mysql_fetch_assoc($query2)){
    array_push($categories, $category['description']);
}
Run Code Online (Sandbox Code Playgroud)


Ale*_*s G 14

答案非常简单:在阅读第一行之前,您正在推送第一个元素.正确的做法是使用前置条件循环:

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

while($category=mysql_fetch_assoc($query2)) {
    array_push($categories, $category['description']);
}
Run Code Online (Sandbox Code Playgroud)

并且,请切换到使用PDO.


Nul*_*teя 12

while循环如何工作

在此输入图像描述

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

所以在你的程序中发生的事情是你在读第一行之前推送第一个元素.

所以请改用

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

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

while($category=mysql_fetch_assoc($query2)) {
    array_push($categories, $category['description']);
}
Run Code Online (Sandbox Code Playgroud)

注意

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

好读

  1. 不推荐使用mysql扩展,将来会删除它:使用mysqli或PDO代替

  • 最佳答案.它有一个流程图,一个文本解释,它提到了API的弃用......你还需要什么? (4认同)

Sho*_*hoe 5

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

while($category = mysql_fetch_assoc($query2)) {
    array_push($categories, $category['description']);
}
Run Code Online (Sandbox Code Playgroud)

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


Veg*_*ger 5

首先将value(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']);
}
Run Code Online (Sandbox Code Playgroud)