需要php从文件夹和子文件夹加载文件,然后对添加到数组中的结果进行排序

需要php从文件夹和子文件夹加载文件,然后对添加到数组中的结果进行排序,php,sorting,directory,Php,Sorting,Directory,我需要搜索文件夹和子文件夹以搜索文件。在这个搜索中,我需要知道文件名及其路径,因为这些文件中有不同的文件夹和文件 我的名字是05 Navy,在这个文件夹中我有3个文件,分别是05_Navy_White_BaseColor.jpg、05_Navy_White_Normal.jpg和05_Navy_White_Occlusion RoughnessMetallic.jpg 我一次只需要得到其中一个,因为我需要将它们分别添加到不同的列表中 然后我想出了下面的代码: function getDir

我需要搜索文件夹和子文件夹以搜索文件。在这个搜索中,我需要知道文件名及其路径,因为这些文件中有不同的文件夹和文件

我的名字是05 Navy,在这个文件夹中我有3个文件,分别是05_Navy_White_BaseColor.jpg、05_Navy_White_Normal.jpg和05_Navy_White_Occlusion RoughnessMetallic.jpg

我一次只需要得到其中一个,因为我需要将它们分别添加到不同的列表中

然后我想出了下面的代码:

   function getDirContents($dir, &$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 != "." && $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'); 
函数getDirContents($dir,&$results=array()){ $files=scandir($dir); $findme='u BaseColor'; $mypathCordas=null; $findmeCordas='Cordas'; foreach($key=>$value形式的文件){ $path=realpath($dir.DIRECTORY\u SEPARATOR.$value); $mypathCordas=$path; $pos=strpos($mypathCordas,$findme); $posCordas=strpos($mypathCordas,$findRecordas); 如果(!is_dir($path)){ if($posCordas==true){ 如果($pos==true){ $results[]=$path; } } } 如果($value!=“&&&$value!=”),则为else{ if($posCordas==true){ 回声“
”; getDirContents($path,$results); //$results[]=$path; } } } 排序(结果); 对于($i=0;$i”; } 返回$results; } getDirContents(“场景/纹理”); 作为输出结果,我得到以下结果:Results

这一点都不理想,最大的问题是列表每次添加新值时都会插入相同的值,正如您所看到的,它一点也不排序,但会洗牌。我做了其他事情,比如我尝试使用DirectoryIterator,它工作得非常好,但我根本无法排序

每次列表中出现新内容时打印可能是我的for(),但我对php比较陌生,所以我不能确定


还有,它获取所有路径,我已经尝试使用其他方法,但只得到了错误,我只需要场景/纹理/而不是绝对路径….

您正在尝试所有子文件夹中的所有文件名及其完整路径?我认为,排序是另一个问题?您将需要递归(当您尝试时),或者,如果是迭代,您将需要一个“堆栈”。如果递归不是你的事情,那么这可以通过一个不断增长的“堆栈”为每个新的子目录迭代完成。我所说的“stack”只是指一个简单的字符串数组,其中包含每个遇到的文件夹的路径。你将在你的循环中遍历它。我将如何做到这一点@GetSet@oguzhancerit嗯,我可以只使用它们的名称和父文件夹,并使用一个变量来连接它们…我想如果您已经假设子文件夹只有1级嵌套深度,您可以这样做。您正在尝试所有子文件夹中的所有文件名及其完整路径?我认为,排序是另一个问题?您将需要递归(当您尝试时),或者,如果是迭代,您将需要一个“堆栈”。如果递归不是你的事情,那么这可以通过一个不断增长的“堆栈”为每个新的子目录迭代完成。我所说的“stack”只是指一个简单的字符串数组,其中包含每个遇到的文件夹的路径。你将在你的循环中遍历它。我将如何做到这一点@GetSet@oguzhancerit好吧,我可以只使用它们的名称和父文件夹,并使用一个变量来连接它们…我想如果您已经假设子文件夹只有1级嵌套深度,您可以这样做。