|
|
|
| Т.к. функция 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>";
}
?>
|
| |
|
|
|
|
|
|
|
для: 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>";
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(08.08.2005 в 13:28)
| | Код корректно работает, если внутри дирректории temp одна дирректория, но не работает, когда в ней множество дирректории, и вот от последней то и нужно вычесть 2 символа.
Заранее спасибо. | |
|
|
|
|
|
|
|
для: totx
(08.08.2005 в 15:10)
| | Так кажется )))
$w="abcdef";
$e=substr($w, -2); // возвращает "ef"
echo"$e";
|
Выведет ef | |
|
|
|
|
|
|
|
для: V!rus
(08.08.2005 в 17:31)
| | Ты немножко недопонял, прочти внимательно.
Предыдущий совет работает, но он работает если только одна дирректория в считываемой папке.
Тоесть в твоем примере как раз ef и недолжно быть! А остальное пусть остается.
Но с этим уже разобрались, нужно просто чтобы именно с последней прочитанной дирректории вычеталось 2 символа(тоесть их не должно быть!). | |
|
|
|
|
|
|
|
для: cheops
(08.08.2005 в 13:28)
| | Значит это невозможно, или просто никто не знает ? | |
|
|
|
|
|
|
|
для: totx
(09.08.2005 в 17:41)
| | Не очень понятно какая директория имеется ввиду: последняя прочитанная функцией readdir() или последняя в отсортированном списке? | |
|
|
|
|
|
|
|
для: cheops
(09.08.2005 в 21:05)
| | В отсортированном списке !!! | |
|
|
|
|
|
|
|
для: 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>";
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(10.08.2005 в 00:10)
| | что-то он не корректно работает, вместо того чтобы выдавать:
1
22
333
4444
555
555 - это урезанная 55555
а ваш скрипт выдает:
5551
22
333
4444
55555
| |
|
|
|
|
|
|
|
для: 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);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(10.08.2005 в 00: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);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(10.08.2005 в 01:45)
| | Большое СПАСИБО, всё работает. | |
|
|
|
|
|
|
|
для: 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++)
{
все действия вывода имен дирректорий проходят здесь и только здесь.
}
|
Если, что-то не ясно объяснил, могу поподробнее. | |
|
|
|
|
|
|
|
для: 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;
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(10.08.2005 в 13:02)
| | А если так...
<?php
for ($i=0;$i<sizeof($dirs);$i++)
{
$name = $dirs[$i];
($i<>0)? print "<br>":"";
print $name;
}
?>
|
| |
|
|
|