san_jorich
@san_jorich
Творческий кодер

Как сделать рекурсивно правильно?

Здравствуйте!
Подскажите как правильно сделать рекурсивное заполнение массива в функции.. запутался..
function rotator_scan_localStorage($directory) {
	  $songs = []; $valid_ext = array("mp3", "wav", "m3u");
	  if($local_storage = opendir($directory)){
        while(false !== ($file = readdir($local_storage))) {
        	
          if($file != "." && $file != ".."){ 

           	if(is_file($directory.'/'.$file) AND in_array(rotator_getExtension($file),$valid_ext) ){
              $songs['media_'.$file]['filename'] = str_replace('.'.rotator_getExtension($file), "", $file);
              $songs['media_'.$file]['tags'] = rotator_get_tags($directory.'/'.$file);
              $songs['media_'.$file]['song_path'] = $directory.'/'.$file;
              $songs['media_'.$file]['song_url'] = LOCAL_MEDIALIB_URL.'/'.$file;
              if($directory !== LOCAL_MEDIALIB_PATH){ $songs['media_'.$file]['intended_cat'] = str_replace(LOCAL_MEDIALIB_PATH.'/', "", $directory); }
              
            }
           	elseif(is_dir($directory.'/'.$file)){              
              rotator_scan_localStorage($directory.'/'.$file);
            }
          }
        }
	  }
    return $songs;
	}
  • Вопрос задан
  • 89 просмотров
Решения вопроса 1
Compolomus
@Compolomus Куратор тега PHP
Комполом-быдлокодер
Можно за раз пройти рекурсивным итератором для директорий

$array = [];
$dir = realpath('.'); //путь до папки

$fileSPLObjects =  new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::CHILD_FIRST);
foreach($fileSPLObjects as $fullFileName => $fileSPLObject ) {
    if ($fileSPLObject->isFile()) {
        $info = new SplFileInfo($fullFileName);    
        if (in_array($info->getExtension(), $ext)) {
            $array[] = $fullFileName;    
        }
    }
}

echo '<pre>';
print_r($array);

Можно даже массив по расширениям заполнить
$array[$ext][]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
25 апр. 2024, в 16:12
2000 руб./за проект
25 апр. 2024, в 16:08
130000 руб./за проект