Листинг папки с записью в массив

Print RSS
244

K
Author
Транклюкаторщик
0
нужна немного необычная функция листинга директории.
надо чтоб работала так:
1) открываю директорию, считываю названия всех файлов / папок
2)если папка - делаю массив с ключом [название папки]=> и значениями array(файл1,файл2,файл3)
------------------
результат должен быть таким:
содержимое папок:

папка1:
> файл1.мп3
> файл2.мп3
> папка2:
>>файл3.мп3
>>файл4.мп3


array(['папка1']=>array([0]=>'файл1.мп3',[1]=>'файл2.мп3',['папка2']=>array([0]=>'файл3.мп3',[1]=>'файл4.мп3')))
------------------
делаю так:
<?
function list_dir ($url) {
$i = 0;
$dir = opendir($url);
while (false !== ($file = readdir($dir))) {
if(($file !='.') && ($file !='..')) {
$file = iconv('cp1251','utf-8',$file);
if(is_dir("$url/$file")){$outp[$file] = list_dir("$url/$file");} elseif(is_file("$url/$file")){
$outp[] = $file;}
$i++;
}

}
closedir($dir);
return $outp;
}
?>
только почему то в массив входят не все файлы
Changed: KOZZ (01.08.2010 / 19:32)
K
Author
Транклюкаторщик
0
а оказывается все было так просто...
надо было вместо elseif вставить else,т.к. иначе сбивался счетчик
<?
function list_dir ($url) {
$i = 0;
$dir = opendir($url);
while (false !== ($file = readdir($dir))) {
if(($file !='.') && ($file !='..')) {
$file = iconv('cp1251','utf-8',$file);
if(is_dir("$url/$file")){$outp[$file] = list_dir("$url/$file");} else{
$outp[] = $file;}
$i++;
}

}
closedir($dir);
return $outp;
}

?>

Оранжевые штаны
0
<?php
function list_dir ($url) {
static $outp;
static $i;
if (empty ($outp)) $outp = array ();
if (empty ($i)) $i = 0;
$files = glob ($url . '/*');
if (is_array ($files)) {
foreach ($files as $file) {
# На *nix и Linux нужно указывать koi8-u
$file = iconv ('windows-1251', 'utf-8', $file);
if (is_dir ($url . '/' . $file)) $outp[$file] = list_dir ($url . '/' . $file);
else $outp[] = $file;
++$i; }}
return $outp; }
?>
Changed: Studentsov (01.08.2010 / 20:02)
K
Author
Транклюкаторщик
0
3, я думал сделать это примерно как ты,через foreach и glob, но остановился на своем варианте, удобнее, да и привычнее чтоли ))
перекодировка нужна была чтоб на денвере тестить
ну а конкретно твой вариант возвращает немного не то что надо ))
вот какой результат мне нужен был: http://upwap.ru/974466
Changed: KOZZ (01.08.2010 / 20:11)
K
Author
Транклюкаторщик
0
3, спасибо что не остался равнодушным ;)
K
Author
Транклюкаторщик
0
кстати почитал про то что быстрее: glob() или opendir().
быстрее opendir().
источник:
http://code2design.com/forums/glob_vs_opendir
"The result was:
0.0069890022277832 (opendir time)
0.027945041656494 (glob time)"
Changed: KOZZ (01.08.2010 / 20:31)

Землянин
0
K
Author
Транклюкаторщик
0
7,спасибо, но не очень я классы люблю.
A

Оранжевые штаны
0
6, этот пример - фигня, обрати внимание, что там цикл из 20 итераций, и 0.02 для этого очень даже неплохо, обычно же применяется всего одна функция glob и время выполнения совсем незначительно
K
Author
Транклюкаторщик
0
9, мне лучше свой smile он ничем не уступает в принципе, сравни мой и способ "Студента_trollface" в действии - его способ еще дорабатывать до нужного мне результата, а разницы ощутимой я не вижу, так что смысла нет.
Changed: KOZZ (02.08.2010 / 08:39)
Stickers / Tags / Rules / Top topics / Top Posts / Search