Цикл не выводит все значения

qwelp

Новичок
Цикл не выводит все значения

PHP:
Функция - imap_num_msg($mbox) выводит правильное значение вне цикла, а в цикле выводит в два раза меньше.
подскажите где ошибаюсь.

echo "Число сообщений - ".imap_num_msg($mbox)."<br>"; 

  for($i = 1; $i <= imap_num_msg($mbox); $i++) 
  { 

    $obj = imap_headerinfo($mbox, $i++); 
    $arr = imap_mime_header_decode($obj->Subject);
	$fromname = imap_mime_header_decode($obj->fromaddress);
	$msg_date = gmstrftime("%d %m %Y", strtotime($obj->Date));

echo ("<tr>");
echo ("<td>".$obj->Unseen."</td>");
echo ("<td>".$fromname[0]->text."</td>");
echo ("<td>".$arr[0]->text."</td>");
echo ("<td>".$msg_date."</td>");
echo ("<td>".$obj->Size."</td>");
echo ("</tr>");
}
 

qwelp

Новичок
Апокалипсис - Может сделать на форуме автоматический ответ -> читайте мануал php.net и вопросов больше не у кого не возникнет.

В коде ошибок нет. возможно не правильно использовал цикл.

Код:
Всем спасибо разобрался применил дополнительный цикл while
кому интересно вот код

echo "Число сообщений - ".imap_num_msg($mbox)."<br>"; 

  for($i = 1; $i <= imap_num_msg($mbox); $i++) 
  { 
  while($i <= imap_num_msg($mbox)) {
  $obj = imap_headerinfo($mbox, $i++); 
   $arr = imap_mime_header_decode($obj->Subject);
	$fromname = imap_mime_header_decode($obj->fromaddress);
	$msg_date = gmstrftime("%d %m %Y", strtotime($obj->Date));
  
echo ("<tr>");
echo ("<td>".$obj->Unseen."</td>");
echo ("<td>".$fromname[0]->text."</td>");
echo ("<td>".$arr[0]->text."</td>");
echo ("<td>".$msg_date."</td>");
echo ("<td>".$obj->Size."</td>");
echo ("</tr>");
}
}
 

Андрейка

Senior pomidor developer
qwelp
Может сделать на форуме автоматический ответ -> читайте мануал php.net и вопросов больше не у кого не возникнет.
в процессе.. пока приходицца обходицца полуавтоматическими методами

В коде ошибок нет.
если не работает как надо значит ошибки есть

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

возможно не правильно использовал цикл.
скорее всего.. может внимательное изучение кода на наличие откровенной глупости поможет
 

qwelp

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

Апокалипсис

тех дир matras.ru
Андрейка
такие методы уже есть только сразу Quick close -> читаем FAQ:D

В коде ошибок нет. возможно не правильно использовал цикл.
а неправильно использовав цикл это не ошибка, да так, помарка:)
 

qwelp

Новичок
а неправильно использовав цикл это не ошибка, да так, помарка Цикл использовал правильно. нехватало еще одного цикла. Вот я и обратился за помощью
 

Андрейка

Senior pomidor developer
qwelp
а теперь объясни зачем там нужен второй(или первый, по вкусу) цикл?
 

qwelp

Новичок
если оставляю один цикл while то функция
imap_headerinfo($mbox, $i++) ругается на Bad message number . а если оставляю цикл for то выводит в два раза меньше и наконец когда оба работают то все ок. я непонимаю почему так работает. если знаешь объясни?
 

qwelp

Новичок
Вау. все так просто оказалось. спасибо Апокалипсис все работает.
 

Апокалипсис

тех дир matras.ru
На будущее чтобы отлаживать такие ситуации, если ты знаешь кол-во записей, нужно смотреть сколько раз и что выводит цикл.
То бишь:
делать echo $i; после цикла, тогда будет видно что он выводит:)
 

Viktor_Rez

Новичок
qwelp,цикл, который ты привел вначале, выводит в 2 раза меньше значений, потому что у тебя в теле цикла есть выражение
PHP:
$obj = imap_headerinfo($mbox, $i++);
Второй вариант с вложенными циклами выводил правильно, потому что второй цикл while
делал всю работу за цикл for. Цикл for делал всего одну итерацию (проход).

Цикл, который тебе предложил Апокалипсис в твоём случае тоже выводит в 2 раза меньше значений, т.к. в нём всё так же присутствует
PHP:
$obj = imap_headerinfo($mbox, $i++);
Что бы твой первый цикл выводил все значения ты, наверное, убрал постфиксный инкремент у переменной $i и теперь выражение выглядит
PHP:
$obj = imap_headerinfo($mbox, $i);
?
Объясни мне, как у тебя всё работает, я не понимаю.
 

qwelp

Новичок
постфиксный инкремент у переменной $i не убирал. но если тебе очень интересно и есть доступ к imap серверу то могу прислать тебе этот участок кода. который выводит в список ТЕМУ. ИМЯ ФАМИЛИЮ. ДАТУ. СТАТУС и РАЗМЕР сообщения.
 

OZ

Новичок
Viktor_Rez, я вот тоже думал, зачем он увеличивает $i при чтении заголовков. Это, видимо, тот случай, когда программа работает и лучше её не трогать.
 

Viktor_Rez

Новичок
OZ, если qwelp не убирал постфиксный инкремент в том выражении о котором я писал, то наверное сейчас всё выглядет так:
PHP:
$i=1;
while($i <= imap_num_msg($mbox))
{
        ...
        $obj = imap_headerinfo($mbox, $i++);
        ...
}
Ты как думаешь?
 
Сверху