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

时间:2012-12-19 12:23:09

标签: php mysql arrays

我无法绕过这一个。

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

阵列:

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));

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

6 个答案:

答案 0 :(得分:21)

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

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

答案 1 :(得分:14)

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

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

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

并且,请切换到使用PDO。

答案 2 :(得分:12)

while循环如何工作

  

enter image description here

     

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

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

所以请改用

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

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

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

注意

  1. 整个 ext/mysql PHP扩展程序(提供名为mysql_的所有函数)为officially deprecated as of PHP v5.5.0,将来会被删除。因此,请使用PDOMySQLi
  2. 好读

    1. The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead

答案 3 :(得分:5)

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

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

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

答案 4 :(得分: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']);
}

答案 5 :(得分:1)

尝试这样做:

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