Подтвердить что ты не робот

Почему мой массив начинается с пустого значения?

Я не могу обернуть голову вокруг этого.

Когда я создаю массив, он начинается с пустого значения. Значения, которые должны быть в массиве, начинаются со второго.

Массив:

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?

4b9b3361

Ответ 1

Это из-за того, что while цикл пытается в цикле

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

Ответ 2

Ответ очень прост: вы проталкиваете первый элемент перед чтением первой строки. Правильный способ сделать это будет с циклом предустановки:

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

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

И, пожалуйста, переключитесь на использование PDO.

Ответ 3

Как работает цикл while

enter image description here

Основное отличие от регулярных циклов состоит в том, что первая итерация цикла do-while гарантирована для запуска (выражение истинности проверяется только в конце итерации), тогда как это может не обязательно выполняться с регулярным while loop (выражение истинности проверяется в начале каждой итерации, если он оценивает FALSE с самого начала, выполнение цикла заканчивается немедленно). source

поэтому в вашей программе произошло то, что вы нажимаете на первый элемент, прежде чем читать первую строку.

поэтому используйте вместо этого

что будет делать wile loop? как в блок-схеме, он сначала проверяет, чем попадает внутрь тела цикла, поэтому элемент нажимает после считывания первой строки

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

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

Примечание

  • Полное расширение PHP ext/mysql, которое предоставляет все функции с именем prefix mysql_, официально устарело как PHP v5.5.0 и будут удалены в будущем. Поэтому используйте либо PDO, либо MySQLi

Хорошее чтение

Ответ 4

Потому что вы должны использовать цикл while вместо цикла do-while.

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

Вместо кода в первой итерации цикла (при первом вводе блока do) $category не задается, поэтому значение первого значения массива должно быть пустым.

Ответ 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']);
}

Ответ 6

Попробуйте сделать это вместо:

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