Ответ 1
Это из-за того, что while цикл пытается в цикле
while($category=mysql_fetch_assoc($query2)){
array_push($categories, $category['description']);
}
Я не могу обернуть голову вокруг этого.
Когда я создаю массив, он начинается с пустого значения. Значения, которые должны быть в массиве, начинаются со второго.
Массив:
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?
Это из-за того, что while цикл пытается в цикле
while($category=mysql_fetch_assoc($query2)){
array_push($categories, $category['description']);
}
Ответ очень прост: вы проталкиваете первый элемент перед чтением первой строки. Правильный способ сделать это будет с циклом предустановки:
$categories = array();
$query2 = mysql_query("SELECT * FROM books_categories");
while($category=mysql_fetch_assoc($query2)) {
array_push($categories, $category['description']);
}
И, пожалуйста, переключитесь на использование PDO.
Как работает цикл while
Основное отличие от регулярных циклов состоит в том, что первая итерация цикла 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']);
}
Примечание
ext/mysql
, которое предоставляет все функции с именем prefix mysql_, официально устарело как PHP v5.5.0 и будут удалены в будущем. Поэтому используйте либо PDO
, либо MySQLi
Хорошее чтение
Потому что вы должны использовать цикл while вместо цикла do-while.
while($category = mysql_fetch_assoc($query2)) {
array_push($categories, $category['description']);
}
Вместо кода в первой итерации цикла (при первом вводе блока do) $category
не задается, поэтому значение первого значения массива должно быть пустым.
Сначала вы записываете значение (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']);
}
Попробуйте сделать это вместо:
$categories = array();
$query2 = mysql_query('SELECT * FROM books_categories');
while($r = mysql_fetch_array($query2)){
$categories[] = $r['description'];
}