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

#php #sorting #directory

#php #сортировка #каталог

Вопрос:

Мне нужно выполнить поиск по папкам и вложенным папкам в поисках файлов. В этом поиске мне нужно знать имена файлов и их путь, потому что у меня есть разные папки и файлы внутри них.

У меня есть это имя 05-Navy, и внутри этой папки у меня есть 3 файла с именем 05_Navy_White_BaseColor.jpg , 05_Navy_White_Normal.jpg и 05_Navy_White_OcclusionRoughnessMetallic.jpg .

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

Затем я придумал приведенный ниже код:

    function getDirContents($dir, amp;$results = array()) {
            $files = scandir($dir);

            $findme = '_BaseColor';

            $mypathCordas = null;
            $findmeCordas = 'Cordas';
        
            foreach ($files as $key => $value) {
                $path = realpath($dir . DIRECTORY_SEPARATOR . $value);

                $mypathCordas = $path;
                $pos = strpos($mypathCordas, $findme);
                $posCordas = strpos($mypathCordas, $findmeCordas);
                
                if (!is_dir($path)) {
                    if($posCordas == true){
                        if($pos == true){
                            $results[] = $path;
                        }
                    }
                } 
                else if ($value != "." amp;amp; $value != ".." ) {
                    if($posCordas == true){
                        echo "</br>";
                            getDirContents($path, $results);
                            //$results[] = $path;
                    }
                    
                }
            }
            sort( $results );
            for($i = 0; $i < count($results); $i  ){
                echo $results[$i];
                
                echo "</br>";
            }
            return $results;
        }
        
        getDirContents('scenes/Texturas'); 
 

в качестве выходного результата я получаю следующее: Результаты 1

Что совсем не идеально, самая большая проблема заключается в том, что список вставляет одни и те же значения каждый раз, когда он добавляет новые, и, как вы можете видеть, он не сортирует один бит, а перетасовывает. Я делал другие вещи, например, я пытался использовать DirectoryIterator, который работал очень хорошо, но я вообще не мог сортировать…

Печать каждый раз, когда в списке появляется что-то новое, может быть моей for() , но я относительно новичок в php, поэтому я не могу быть уверен.

Кроме того, есть такая вещь, где он получает весь путь, и я уже пробовал использовать другие методы, но получил только ошибки, где мне понадобились бы только сцены / текстуры / вместо абсолютного пути….

Комментарии:

1. Вы пытаетесь использовать все имена файлов во всех ваших вложенных папках с их полным путем? Я думаю, сортировка — это еще одна проблема?

2. Вам понадобится рекурсия (по мере того, как вы пытаетесь), или, если итеративный, вам понадобится «стек». Если рекурсия вам не подходит, то это можно выполнять итеративно с постоянно растущим «стеком» для каждого нового вложенного каталога. Под «стеком» я просто подразумеваю простой массив строк, содержащий путь к каждой обнаруженной папке. Который вы бы пересмотрели в своем цикле.

3. И как мне это сделать? @GetSet

4. @oguzhancerit ну, я мог бы использовать только их имена и родительскую папку и использовать переменную для объединения с ними…

5. Я думаю, вы могли бы, если вы уже предполагаете, что вложенные папки имеют глубину всего 1 уровень.