[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Обход файлов в каталоге
Lutsk
При обходе директории с файлами в цикле перед выводом 1-го файла выводятся сначала точки. В чем тут загвоздка? Вот php:
if ($handle = opendir('./application/files')) {

while (false !== ($entry = readdir($handle))) {
echo '<a href="'. $entry .'">Скачать вложение</a>';
}

closedir($handle);
}

А это сгенерированный HTML:
<a href=".">Скачать вложение</a>
<a
href="..">Скачать вложение</a>
<a
href="file1.txt">Скачать вложение</a>
<a
href="file2.txt">Скачать вложение</a>
<a
href="file3.xls">Скачать вложение</a>




Спустя 4 минуты, 13 секунд (23.07.2012 - 16:53) SerginhoLD написал(а):
Все нормально, данная и предыдущая директории, не хочешь их выводить, напиши условие

Спустя 9 минут, 48 секунд (23.07.2012 - 17:03) pak написал(а):
вместо opendir, readdir, closedir можно использовать

scandir('./application/files');

Спустя 2 минуты, 28 секунд (23.07.2012 - 17:06) Lutsk написал(а):
получается, - только так?
if ($handle = opendir('./application/files')) {

while (false !== ($entry = readdir($handle))) {

if ( $entry != "." && $entry != ".." ) {
echo '<a href="'. $entry .'">Скачать вложение</a>';
}

}


closedir($handle);
}

Спустя 4 минуты, 27 секунд (23.07.2012 - 17:10) pak написал(а):
или так:

$f = './news';
$arr = scandir($f);
for($i = 2; $i < count($arr); $i++)
echo '<a href="'. $arr[$i] .'">Скачать вложение</a><br />';

Спустя 9 минут, 25 секунд (23.07.2012 - 17:19) Lutsk написал(а):
Ок, pak, спасибо, с меня +!

Спустя 50 минут, 27 секунд (23.07.2012 - 18:10) RCuPeR написал(а):
Цитата (pak @ 23.07.2012 - 14:10)
или так:

$f = './news';
$arr = scandir($f);
for($i = 2; $i < count($arr); $i++)
echo '<a href="'. $arr[$i] .'">Скачать вложение</a><br />';

Правила хорошего тона гласят, что нельзя вносить count() в условие цикла.
Ну... Это если совсем идеальный скрипт делать smile.gif

Спустя 5 минут, 48 секунд (23.07.2012 - 18:16) kamanch написал(а):
pak
Чисто теоретический вопрос:
файлы "." и ".." во всех ОС, любых файловых системах, при любых настойках всегда выдаются на первых 2х позициях?

Спустя 7 минут, 51 секунда (23.07.2012 - 18:24) pak написал(а):
RCuPeR
как то не задумывался об этом, а почему, где то написано? =)

h.n.81
наверно)

Спустя 15 минут, 58 секунд (23.07.2012 - 18:39) kamanch написал(а):
Наверное - это не наш подход :)
Значит
for($i = 2; $i < count($arr); $i++)
гепотетически может сработать криво.

Спустя 1 час, 31 минута, 29 секунд (23.07.2012 - 20:11) RCuPeR написал(а):
Цитата (h.n.81 @ 23.07.2012 - 15:39)
Наверное - это не наш подход :)
Значит
for($i = 2; $i < count($arr); $i++)
гепотетически может сработать криво.

Значит, что count(); выполняется при каждой итерации. Что при больших объемах обрабатываемой информации, хоть и не значительно, но повлияет на производительность.

Спустя 8 минут, 39 секунд (23.07.2012 - 20:20) pak написал(а):
RCuPeR
дада помню, где то читал об этом)

Спустя 1 час, 47 минут, 32 секунды (23.07.2012 - 22:07) SerginhoLD написал(а):
Цитата (RCuPeR @ 23.07.2012 - 17:11)
Значит, что count(); выполняется при каждой итерации.

лютый бред

Спустя 4 минуты, 15 секунд (23.07.2012 - 22:11) kamanch написал(а):
SerginhoLD
Зачем так грубо? Тем более необосновано.
Пишем тестовый пример, и смотрим результат.
В теле цикла меняем размерность массива, и потом тут постим истину.

Спустя 15 минут, 30 секунд (23.07.2012 - 22:27) kamanch написал(а):
Суд постановил, что SerginhoLD мелкий грубиян из-под кровати.

$arr = array(1, 2, 3, 4, 5);

for($i = 0; $i < count($arr); $i++){
echo '$arr['.$i.'] => '.$arr[$i]."<br />";
if($i == 3 ) $arr[] = 6;
}

Вывод:

$arr[0] => 1
$arr[1] => 2
$arr[2] => 3
$arr[3] => 4
$arr[4] => 5
$arr[5] => 6

Спустя 45 секунд (23.07.2012 - 22:28) SerginhoLD написал(а):
Цитата (h.n.81 @ 23.07.2012 - 19:11)
В теле цикла меняем размерность массива, и потом тут постим истину.

извините, но это быдлокод на практике, в циклах foreach и for массивы только перебираются.

Спустя 6 минут, 1 секунда (23.07.2012 - 22:34) killer8080 написал(а):
SerginhoLD
count() будет вызываться на каждой итерации цикла, это факт wink.gif

Спустя 2 минуты, 28 секунд (23.07.2012 - 22:36) kamanch написал(а):
SerginhoLD
Какой быдлокод?
Это тестовый пример, который показывает тебе как работает цикл for
И пример этот должен был тебе показать то, что при каждой новой итерации цикл заново вычисляет все свои аргументы.
А быдлокод получается, когда быдлокодер начинает пренебрегать такими вещами и вместо того, чтобы циклу дать в аргументах уже вычесленные значения, заставляет его каждый раз их вычислять.

Спустя 11 минут, 12 секунд (23.07.2012 - 22:47) SerginhoLD написал(а):
Цитата (h.n.81 @ 23.07.2012 - 19:36)
Какой быдлокод?

самый настоящий
Цитата (h.n.81 @ 23.07.2012 - 19:36)
Это тестовый пример, который показывает тебе как работает цикл for

ок
Цитата (h.n.81 @ 23.07.2012 - 19:36)
И пример этот должен был тебе показать то, что при каждой новой итерации цикл заново вычисляет все свои аргументы.

"не до цитировал" я..
Цитата (h.n.81 @ 23.07.2012 - 19:36)
А быдлокод получается, когда быдлокодер начинает пренебрегать такими вещами и вместо того, чтобы циклу дать в аргументах уже вычесленные значения, заставляет его каждый раз их вычислять.

1. На практике чаще всего используется foreach, он в любом случае жрет больше
2. Чтоб напрячь такой скрипт вычислениями через count, надо так от миллиона записей перебор делать, что означает присутствие быдлокодера, если сформировано такое кол-во smile.gif

Спустя 3 минуты, 14 секунд (23.07.2012 - 22:51) killer8080 написал(а):
Цитата (SerginhoLD @ 23.07.2012 - 22:47)
1. На практике чаще всего используется foreach, он в любом случае жрет больше

абсурд
Цитата (SerginhoLD @ 23.07.2012 - 22:47)
2. Чтоб напрячь такой скрипт вычислениями через count, надо так от миллиона записей перебор делать, что означает присутствие быдлокодера

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

Спустя 3 минуты, 12 секунд (23.07.2012 - 22:54) SerginhoLD написал(а):
Цитата (killer8080 @ 23.07.2012 - 19:51)
какой смысл заставлять интерпретатор выполнять бессмысленные действия?

создание отдельной переменной такое же бессмысленное действие wink.gif

Цитата (killer8080 @ 23.07.2012 - 19:51)
абсурд

вот ты полностью процитировал, даже не знаю про что спорить smile.gif

Спустя 4 минуты, 57 секунд (23.07.2012 - 22:59) killer8080 написал(а):
Цитата (SerginhoLD @ 23.07.2012 - 22:54)
создание отдельной переменной такое же бессмысленное действие

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

Цитата (SerginhoLD @ 23.07.2012 - 22:54)
Цитата (killer8080 @ 23.07.2012 - 19:51)
абсурд


вот ты полностью процитировал, даже не знаю про что спорить

Если и существует разница в быстродействии for vs foreach, то она настолько ничтожна, что не имеет смысла о ней говорить.

Спустя 3 минуты, 9 секунд (23.07.2012 - 23:02) SerginhoLD написал(а):
Цитата (killer8080 @ 23.07.2012 - 19:59)
Если и существует разница в быстродействии for vs foreach, то она настолько ничтожна, что не имеет смысла о ней говорить.

вот-вот с count и отдельной переменной тоже самое, но не я это начал

Спустя 7 минут, 30 секунд (23.07.2012 - 23:09) kamanch написал(а):
SerginhoLD
Тебя оправдывает лишь то, что тебе 21 год, и ты подсознательно уже принял правоту старших товарищией, но твое юношеское эго еще борется с этим smile.gif
Это не страшно, это пройдет...

А чтобы закрепить, вот еще один тестовый пример в ответ на твое
Цитата
создание отдельной переменной такое же бессмысленное действие

Нам нужно в цикле програть что-то такое количество раз, сколько у нас пользователей в базе.
А количество пользователей нам возвращает функция users_count();
Так что лучше?
Один раз присвоить переменной значение этой функции и аргументом в цикл передать эту переменную?
Или же вставить в качестве аргумента в цикле эту функцию? Тоже будет работать, но при каждой итерации цикла мы будем дергать базу. В базе 1000 пользователей? Вот 1000 ненужных запросов и породим.
Оно нам таки надо?

Спустя 4 минуты, 11 секунд (23.07.2012 - 23:14) SerginhoLD написал(а):
Цитата (h.n.81 @ 23.07.2012 - 20:09)
А количество пользователей нам возвращает функция users_count();

Давай еще свой цикл создадим(какой-нибудь forhn81), не мешай откровенно разные вещи, тут вопрос про count() и только

Свернутый текст

Цитата (h.n.81 @ 23.07.2012 - 20:09)
Тебя оправдывает лишь то, что тебе 21 год, и ты подсознательно уже принял правоту старших товарищией, но твое юношеское эго еще борется с этим

один я не смотрю кому сколько лет на этом форуме? что за фобии? я не знаю кто тут "старший товарищ"

Спустя 2 минуты, 41 секунда (23.07.2012 - 23:16) killer8080 написал(а):
Цитата (SerginhoLD @ 23.07.2012 - 22:07)
Цитата (RCuPeR @ 23.07.2012 - 17:11)
Значит, что count(); выполняется при каждой итерации.


лютый бред

SerginhoLD
почему бы просто не признать что был не прав?

Спустя 10 часов, 31 минута, 10 секунд (24.07.2012 - 09:47) RCuPeR написал(а):
Цитата (SerginhoLD @ 23.07.2012 - 19:07)
Цитата (RCuPeR @ 23.07.2012 - 17:11)
Значит, что count(); выполняется при каждой итерации.

лютый бред

Если ты действительно отрицаешь выполнение функции count(); при каждом проходе цикла - дискуссию стоит завершить, разговоры ни о чем.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.