Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: куда деваются элементы массива?
 
 автор: relikt   (31.05.2007 в 08:47)   письмо автору
 
 

помогите есть проблема. вот скрипт.


<?

$dir_rec 
dir(".");
$i 0;
while(
$entry $dir_rec->read()) 
{
    if (
substr($entry,0,6)=="index-"
    {
        
$names[$i]=substr($entry,0);
        
$i++;
    }
}
$dir_rec->close();
natsort($names);
$names array_reverse($names);

  
// Число позиций на странице
  
$pnumber 3;


  
// Формируем промежуточный массив


  // Проверяем передан ли номер текущей страницы
  
if(isset($_GET['page'])) $page $_GET['page'];
  else 
$page 1;
  
// Число страниц
  
$total count($names);
  
$number = (int)($total/$pnumber);
  if((float)(
$total/$pnumber) - $number != 0$number++;

  
$start = (($page 1)*$pnumber 1);
  
$end $page*$pnumber 1;
  if(
$end $total$end $total;


  
// Выводим содержимое страниц
  
for($i $start$i $end$i++)
  {

echo 
"<a href='$names[$i]'>$names[$i]</a><br /><br />";

  }

echo 
"</p></td></tr><tr><td height=\"50px\" valign=\"top\"><p>";
  
// Постраничная навигация
  
for($i 1$i <= $number$i++)
  {
    if(
$i != $number)
    {
      if(
$page == $i)
      {
        echo 
"[".(($i 1)*$pnumber 1)."-".$i*$pnumber."]&nbsp;";
      }
      else
      {
        echo 
"<a href=$_SERVER[PHP_SELF]?page=".$i.">[".(($i 1)*$pnumber 1)."-".$i*$pnumber."]</a>&nbsp;";
      }
    }
    else
    {
      if(
$page == $i)
      {
        echo 
"[".(($i 1)*$pnumber 1)."-".($total 1)."]&nbsp;";
      }
      else
      {

       
### проверка ###
       
if((($i 1)*$pnumber 1)>($total 1))  break;

      echo 
"<a href=$_SERVER[PHP_SELF]?page=".$i.">[".(($i 1)*$pnumber 1)."-".($total 1)."]</a>&nbsp;";
      }
    }
  }

?>


проблема в том, что в каталоге 11 файлов, а ссылка проставляется только на 10 первых. на последней странице текст
Notice: Undefined offset: 11 in y:\home\tester\www\1.php on line 45
Notice: Undefined offset: 11 in y:\home\tester\www\1.php on line 45
тоесть это строка
echo "<a href='$names[$i]'>$names[$i]</a><br /><br />";
как вылечить это? файлы в каталоге имеют имена index-1.php, index-2.php и так далее. тоесть теряется последний файл массива. как его вернуть. проверил, когда в каталоге 8 файлов выводится только 7 первых.

   
 
 автор: coloboc66   (31.05.2007 в 09:20)   письмо автору
 
   для: relikt   (31.05.2007 в 08:47)
 

Счет нужно начинать с нуля:
for($i = 0; $i <$number; $i++)

   
 
 автор: relikt   (31.05.2007 в 09:26)   письмо автору
 
   для: coloboc66   (31.05.2007 в 09:20)
 

не то. в результате выводится две страницы [1-7] [8-9] на них выводятся ссылки на 10 и 9 файлы и теряются все остальные.

здесь постраничная навигация и поэтому если использовать ваше предложение во втором цикле, то получится, что счёт нужно вести с нулевой страницы. да, там появится ссылка на 11 страницу, но эта ссылка будет одна. так же выводится много ошибок
Notice: Undefined offset: -2 in y:\home\tester\www\1.php on line 41
Notice: Undefined offset: -2 in y:\home\tester\www\1.php on line 41
Notice: Undefined offset: -1 in y:\home\tester\www\1.php on line 41
Notice: Undefined offset: -1 in y:\home\tester\www\1.php on line 41

   
 
 автор: kasmanaft   (31.05.2007 в 09:44)   письмо автору
 
   для: relikt   (31.05.2007 в 09:26)
 

Может быть ?
for($i = $start; $i <= $end; $i++)
или
for($i = $start-1; $i < $end; $i++)

Скорее всего второй вариант..

   
 
 автор: relikt   (31.05.2007 в 09:50)   письмо автору
 
   для: kasmanaft   (31.05.2007 в 09:44)
 

неа, выводится ссылка начиная с 10 по 7, далее на странице с 7 по 4. тоесть последняя ссылка аовторяется на стедующей странице. 11 так и не появляется. далее на последней странице выводится
Notice: Undefined offset: 11 in y:\home\tester\www\1.php on line 41
Notice: Undefined offset: 11 in y:\home\tester\www\1.php on line 41
ok второй вариан катит, появилась ссылка на 11, но повторяются последние ссылки на следующих страницах.

   
 
 автор: kasmanaft   (31.05.2007 в 09:57)   письмо автору
 
   для: relikt   (31.05.2007 в 09:50)
 

-

   
 
 автор: relikt   (31.05.2007 в 10:01)   письмо автору
 
   для: kasmanaft   (31.05.2007 в 09:57)
 

решил проблему так
for($i = $start-1; $i < $end-1; $i++)
но пропала самая последняя ссылка на index-1.php

нашёл
$total = count($names) + 1;
всем спасибо, кто ответил на мой вопрос.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования