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

Форум PHP

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

 

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

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

тема: Cтереть 2 последних выводимых символа, как организовать?
 
 автор: totx   (08.08.2005 в 13:24)   письмо автору
 
 

Т.к. функция readdir($dir) читает каталог, а если читать больше нечего то возвращает false, то нужно чтобы когда она возвращала false она делала заданное мной действие(типа print "".$name."<br> - минус 2 символа от имени последней прочитанной дирректории";)
Желательно если Вы хоть немного поможите с этим кодом, но можете и свой:

<?php 
$folder 
'temp'
$dir opendir($folder); 
while(
$line readdir($dir)) 

  if(
is_dir($folder."/".$line) && $line!="." && $line!=".."
  { 
              
$dirs[] = $line
              
$i++; 
  } 

sort($dirs); 
for (
$i=0;$i<sizeof($dirs);$i++) 

  
$name $dirs[$i]; 
  print 
"".$name."<br>"

?>

   
 
 автор: cheops   (08.08.2005 в 13:28)   письмо автору
 
   для: totx   (08.08.2005 в 13:24)
 

<?php 
$folder 
'temp'
$dir opendir($folder); 
while(
$line readdir($dir)) 

  if(
is_dir($folder."/".$line) && $line!="." && $line!=".."
  { 
              
$dirs[] = $line
              
$i++; 
              
$last_line $line;
  } 

// $last_line теперь содержит имя последней директории
// Выводим её имя за вычитом последних двух символов
echo substr($last_line,0,strlen($last_line) - 2);
sort($dirs); 
for (
$i=0;$i<sizeof($dirs);$i++) 

  
$name $dirs[$i]; 
  print 
"".$name."<br>"

?>

   
 
 автор: totx   (08.08.2005 в 15:10)   письмо автору
 
   для: cheops   (08.08.2005 в 13:28)
 

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

   
 
 автор: V!rus   (08.08.2005 в 17:31)   письмо автору
 
   для: totx   (08.08.2005 в 15:10)
 

Так кажется )))

$w="abcdef";
$e=substr($w, -2);    // возвращает "ef"
echo"$e";

Выведет ef

   
 
 автор: totx   (08.08.2005 в 22:50)   письмо автору
 
   для: V!rus   (08.08.2005 в 17:31)
 

Ты немножко недопонял, прочти внимательно.
Предыдущий совет работает, но он работает если только одна дирректория в считываемой папке.
Тоесть в твоем примере как раз ef и недолжно быть! А остальное пусть остается.
Но с этим уже разобрались, нужно просто чтобы именно с последней прочитанной дирректории вычеталось 2 символа(тоесть их не должно быть!).

   
 
 автор: totx   (09.08.2005 в 17:41)   письмо автору
 
   для: cheops   (08.08.2005 в 13:28)
 

Значит это невозможно, или просто никто не знает ?

   
 
 автор: cheops   (09.08.2005 в 21:05)   письмо автору
 
   для: totx   (09.08.2005 в 17:41)
 

Не очень понятно какая директория имеется ввиду: последняя прочитанная функцией readdir() или последняя в отсортированном списке?

   
 
 автор: totx   (09.08.2005 в 22:42)   письмо автору
 
   для: cheops   (09.08.2005 в 21:05)
 

В отсортированном списке !!!

   
 
 автор: cheops   (10.08.2005 в 00:10)   письмо автору
 
   для: totx   (09.08.2005 в 22:42)
 

Тогда лучше эту задачу решить следующим образом
<?php 
$folder 
'temp'
$dir opendir($folder); 
while(
$line readdir($dir)) 

  if(
is_dir($folder."/".$line) && $line!="." && $line!=".."
  { 
              
$dirs[] = $line
              
$i++; 
  } 

sort($dirs); 
// Выводим имя последней директории за вычитом последних двух символов
echo substr($dirs[count($dirs) - 1],0,strlen($dirs[count($dirs) - 1]) - 2);
for (
$i=0;$i<sizeof($dirs);$i++) 

  
$name $dirs[$i]; 
  print 
"".$name."<br>"

?>

   
 
 автор: totx   (10.08.2005 в 00:21)   письмо автору
 
   для: cheops   (10.08.2005 в 00:10)
 

что-то он не корректно работает, вместо того чтобы выдавать:

1
22
333
4444
555

555 - это урезанная 55555
а ваш скрипт выдает:

5551
22
333
4444
55555

   
 
 автор: cheops   (10.08.2005 в 00:45)   письмо автору
 
   для: totx   (10.08.2005 в 00:21)
 

Ну во первых это не мой скрипт :))) а во вторых всё правильно
5551
22
333
4444
55555

Сначала урезанная 55555, а потом всё остальное - просто сместите вывод директории в конец
<?php 
$folder 
'temp'
$dir opendir($folder); 
while(
$line readdir($dir)) 

  if(
is_dir($folder."/".$line) && $line!="." && $line!=".."
  { 
              
$dirs[] = $line
              
$i++; 
  } 

sort($dirs); 
for (
$i=0;$i<sizeof($dirs);$i++) 

  
$name $dirs[$i]; 
  print 
"".$name."<br>"

// Выводим имя последней директории за вычитом последних двух символов 
echo substr($dirs[count($dirs) - 1],0,strlen($dirs[count($dirs) - 1]) - 2); 
?>

   
 
 автор: totx   (10.08.2005 в 01:01)   письмо автору
 
   для: cheops   (10.08.2005 в 00:45)
 

Спасибо конечно за ответ, но нужно чтобы выводило не:

1
22
333
4444
55555
555 

а

1
22
333
4444
555 

Разницу видите? Вот это то у меня и вызвало проблему. Извиняюсь, что плохо объяснил задачу.

   
 
 автор: cheops   (10.08.2005 в 01:45)   письмо автору
 
   для: totx   (10.08.2005 в 01:01)
 

Для решения этой задачи следует просто уменьшить число циклов на 1
<?php 
$folder 
'temp'
$dir opendir($folder); 
while(
$line readdir($dir)) 

  if(
is_dir($folder."/".$line) && $line!="." && $line!=".."
  { 
              
$dirs[] = $line
              
$i++; 
  } 

sort($dirs); 
for (
$i=0;$i<sizeof($dirs) - 1;$i++) 

  
$name $dirs[$i]; 
  print 
"".$name."<br>"

// Выводим имя последней директории за вычитом последних двух символов 
echo substr($dirs[count($dirs) - 1],0,strlen($dirs[count($dirs) - 1]) - 2); 
?>

   
 
 автор: totx   (10.08.2005 в 09:00)   письмо автору
 
   для: cheops   (10.08.2005 в 01:45)
 

Большое СПАСИБО, всё работает.

   
 
 автор: totx   (10.08.2005 в 10:21)   письмо автору
 
   для: cheops   (08.08.2005 в 13:28)
 

А если мы опять возьмем старый добрый код:

<?php 
$folder 
'temp'
$dir opendir($folder); 
while(
$line readdir($dir)) 

  if(
is_dir($folder."/".$line) && $line!="." && $line!=".."
  { 
              
$dirs[] = $line
              
$i++; 
  } 

sort($dirs); 
for (
$i=0;$i<sizeof($dirs);$i++) 

  
$name $dirs[$i]; 
  print 
"".$name."<br>"

?> 

Но в данном случае нам нужно, чтобы у нас:
1) должен быть вывод имен всех дирректорий без обрезания имен
2) Как мы видим print "".$name."<br>"; напечатает их нам с переводом каждого последующего имени на следующую строку (<br> стоит). Так вот нужно, чтобы при выводе имени последней дирректории, тег <br> не прописывался (убить последний <br>)
3. Все это должно быть в:

for ($i=0;$i<sizeof($dirs);$i++) 

 все действия вывода имен дирректорий проходят здесь и только здесь.  


Если, что-то не ясно объяснил, могу поподробнее.

   
 
 автор: cheops   (10.08.2005 в 13:02)   письмо автору
 
   для: totx   (10.08.2005 в 10:21)
 

Можно добавить вывод директории и проверку, является ли элемент массива последним
<?php 
$folder 
'temp'
$dir opendir($folder); 
while(
$line readdir($dir)) 

  if(
is_dir($folder."/".$line) && $line!="." && $line!=".."
  { 
              
$dirs[] = $line
              
$i++; 
  } 

sort($dirs); 
for (
$i=0;$i<sizeof($dirs);$i++) 

  
$name $dirs[$i]; 
  if(
$i sizeof($dirs) - 1) print $folder."/".$name."<br>"
  else print 
$folder."/".$name

?>

   
 
 автор: Андрюха.   (10.08.2005 в 13:28)   письмо автору
 
   для: cheops   (10.08.2005 в 13:02)
 

А если так...

<?php 
for ($i=0;$i<sizeof($dirs);$i++)
{
  
$name $dirs[$i];
  (
$i<>0)? print "<br>":"";
  print 
$name;
}
?>

   
Rambler's Top100
вверх

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