#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 уровень.