Вывод данных массива с помощью цикла while

Vladimir59

Новичок
Вывод данных массива с помощью цикла while

При использовании цикла while после функции mysql_fetch_array, в вывод попадают только значения, начиная со второго.

Вот простейший примерчик, при котором на вывод не попадает начальный элемент массива:
PHP:
$array_cat=mysql_fetch_array($query_cat);
while($array_cat=mysql_fetch_array($query_cat)){
printf("Категория:%s", $array_cat['cat']);
}
При использовании в данном случае цикла do while, вывод производится с начального значения. Если при использовании while убрать строчку $array_cat=mysql_fetch_array($query_cat); , то вывод так же идет с начального значения.
Строка $array_cat=mysql_fetch_array($query_cat); нужна, так как перед циклом используются некоторые значения массива, содержащиеся в $array_cat.
Вопрос состоит в том, почему при использовании while после применения mysql_fetch_array происходит извлечение элементов, начиная со второго, а не с начального? Предполагаю, что дело во внутреннем счетчике, который после применения mysql_fetch_array сдвигается на 1. Как в данном случае поступить? Испльзовать do while, или есть другие варианты, с помощью которых можно решить данную проблемку?

Заранее извиняюсь за простейший вопрос, но самостоятельно ответа не нашел.
 

Фанат

oncle terrible
Команда форума
для начала покажи нам массив, вывод данных которого ты пытаешься столь блистательно осуществить с помощью цикла while

-~{}~ 14.05.08 21:10:

Апокалипсис, зачод
 

Vladimir59

Новичок
PHP:
<?php
$query_cat=mysql_query("SELECT c.title, c.keywords, c.description, s.id, s.subcat
                                           FROM categories AS c, subcategories AS s
                                           WHERE c.id='$cat' AND c.id=s.id_cat
                                           GROUP BY s.subcat", $con)
$array_cat=mysql_fetch_array($query_cat);
?>
<HTML>
<HEAD>
<TITLE>
PHP:
<?php echo $array_cat['title']; ?>
</TITLE>
<META NAME="keywords" CONTENT="
PHP:
<?php echo $array_cat['keywords']; ?>
">
<META NAME="description" CONTENT="
PHP:
<?php echo $array_cat['description']; ?>
">
</HEAD>
PHP:
<?php 
  while($array_cat=mysql_fetch_array($query_cat)){  
    printf("<A HREF='subcat.php?subcat=%s'>%s</A>",$array_cat['id'],$array_cat['subcat']);
  }  
?>
</HTML>
Например, если в поле subcat базы содержаться значения TOYOTA, NISSAN, HONDA, то выводятся только NISSAN и HONDA.
Первое значение не выводится.
Спасибо за отклик, но переименование переменной $array_cat
при первом присваивании значений, результата не меняет.
Сам пока нашел только два варианта решения. Либо один запрос к базе разбивать на два, либо использовать do while.
Но хочется понять суть. Может есть более приемлемое решение.
 

nirex

Новичок
а если выполнить в клиенте мускуля твой запрос три записи вылезают ?

-~{}~ 14.05.08 22:49:

ой
а второй строкой у тебя это что ? ;)))))
убери ее и все будет гуд ))))))
 

nirex

Новичок
или даже так ))))
<?php
$query_cat=mysql_query("SELECT c.title, c.keywords, c.description, s.id, s.subcat
FROM categories AS c, subcategories AS s
WHERE c.id='$cat' AND c.id=s.id_cat
GROUP BY s.subcat", $con)
$array_cat=mysql_fetch_array($query_cat);
?>
<HTML>
<HEAD>
<TITLE> <?php echo $array_cat['title']; ?> </TITLE>
<META NAME="keywords" CONTENT=" <?php echo $array_cat['keywords']; ?> ">
<META NAME="description" CONTENT=" <?php echo $array_cat['description']; ?> ">
</HEAD>

<?php
printf("<A HREF='subcat.php?subcat=%s'>%s</A>",$array_cat['id'],$array_cat['subcat']);
while($array_cat=mysql_fetch_array($query_cat)){
printf("<A HREF='subcat.php?subcat=%s'>%s</A>",$array_cat['id'],$array_cat['subcat']);
}
?>
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
[...]

-~{}~ 14.05.08 22:02:

по-моему вы только запутаете ТС-а
 

Фанат

oncle terrible
Команда форума
Vladimir59, ты плохо понимаешь по-русски?
Я просил показать МАССИВ. Массив, а не КОД похапе.
Ты не знаешь что такое массив? Честно скажи об этом - тебе объяснят.

Чтобы понять суть, надо понять суть своих действий.
То, как работает этот скрипт, ЛОГИЧНО и ОЧЕВИДНО. И если тебе его поведение кажется неправильным - у тебя неправильные представления о программировании и пхп. И их надо исправлять. А не искать замену одного кривого кода на другой
 

nirex

Новичок
Vladimir59
Перед тем как писать надо спроектировать проект на бумаге, хоть приблизительную его модель.
А то его как не крути, получается бред.
))))
<?php
$query_cat=mysql_query("SELECT c.title, c.keywords, c.description, s.id, s.subcat
FROM categories AS c, subcategories AS s
WHERE c.id='$cat' AND c.id=s.id_cat
GROUP BY s.subcat", $con);

$chkShowHeader = true;
while($array_cat=mysql_fetch_array($query_cat))
{
if( $chkShowHeader ){ showHeader($array_cat); $chkShowHeader=false;}
printf("<A HREF='subcat.php?subcat=%s'>%s</A>",$array_cat['id'],$array_cat['subcat']);
}
if( $chkShowHeader ){ showHeader($array_cat); $chkShowHeader=false;}
function showHeader($options)
{
?>
<HTML>
<HEAD>
<TITLE> <?php echo $options['title']; ?> </TITLE>
<META NAME="keywords" CONTENT=" <?php echo $options['keywords']; ?> ">
<META NAME="description" CONTENT=" <?php echo $options['description']; ?> ">
</HEAD>
<?php
}
?>
 

Vladimir59

Новичок
Спасибо всем ответившим. Пока использую do while, но объяснения данного явления так и не нашел. Пробовал ставить в код print_r(); до строки
PHP:
while($array_cat=mysql_fetch_array($query_cat)){
и после нее. Так же пробовал переименовывать переменную во второй строке. Результат не меняется. До применения while (в не зависимости от того, переименована переменная $array_cat во второй строке или нет) print_r отображает массив начиная с первой записи. Подставленный же print_r, сразу после строки
PHP:
while($array_cat=mysql_fetch_array($query_cat)){
отображает записи, начиная со второй. Как только убираю вторую строку
PHP:
$array_cat=mysql_fetch_array($query_cat);
все встает на свои места. Применение:
PHP:
reset ($array_cat);
перед использования while, то же не помогает. Не могу понять, почему внутренний указатель массива при повторном вызове
PHP:
mysql_fetch_array
встает на вторую запись?
Так и должно быть, или это возможно что-то с настройками?
Огромная просьба объяснить, кто знает.
 

kvf77

Red Devil
Vladimir59
Расскажи нам, а на какую запись он должен вставать по твоему мнению?
 

BrigadeFuhrer

Новичок
Не могу понять, почему внутренний указатель массива при повторном вызове
если бы это было не так у тебя был бы бесконечный цикл

-~{}~ 15.05.08 12:23:

PHP:
while($array_cat=mysql_fetch_array($query_cat)){
цикл работает до тех пор пока mysql_fetch_array что-то возвращает.

PHP:
$array_cat=mysql_fetch_array($query_cat); echo $array_cat['subcat'];//TOYOTA
$array_cat=mysql_fetch_array($query_cat); echo $array_cat['subcat']; //NISSAN
$array_cat=mysql_fetch_array($query_cat); echo $array_cat['subcat']; //HONDA
$array_cat=mysql_fetch_array($query_cat); echo $array_cat['subcat']; пусто, так как конец набора данных, с этого места цикл прекращается,
 

Vladimir59

Новичок
Расскажи нам, а на какую запись он должен вставать по твоему мнению?
Я считал, что при повторном занесении значений в массив, указатель должен вставать на начало. По крайней мере после занесения значений в новую переменную или после применения
PHP:
reset();
reset(); указатель массива на начало тоже не переводит. Или я не правильно понимаю работу этой функции?

Но это только мое мнение. Истина видимо в другом. Поэтому я и ищу ответа.
 

kvf77

Red Devil
Vladimir59
По-моему ты не излечим. Ты голову включи уже. Ты когда вяжешь свитер, что перед каждой новой петлей распускаешь предыдущую?
 

Vladimir59

Новичок
от тупой.
где ты здесь увидел здесь массив, дятел?
Прошу прощения, *****, но если бы я не начинал изучать, а имел тот уровень знаний, который имеете Вы, то я бы за помощью не обращался.
 

Фанат

oncle terrible
Команда форума
Я тебе три раза вопрос задал.
Что мешало тебе на него ответить? Уровень знаний?

-~{}~ 15.05.08 12:58:

указатель должен вставать на начало.
на начало ЧЕГО?

-~{}~ 15.05.08 13:17:

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

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

kvf77

Red Devil
*****
да я понял его проблему - просто пытался задать твой вопрос по-другому :) оказалось, что аллигорий он тоже не понимает
 
Сверху