学习PHP.存在递归目录循环问题


Learning PHP. Have recursive directory loop issue

所以,我熟悉Javascript、HTML和Python。我从来没有学过PHP,现在,我正把头靠在桌子上,试图弄清楚(对我来说)什么是如此简单的事情。

我有一个文件夹和其他文件夹,其中包含图像。

目前,我只是想得到一个文件夹列表作为链接。我做到了,但我的输出总是相反!Folder01Folder02分别为Folder02Folder01。我无法对我的输出进行分类。我一直在寻找,试图弄清楚这一点,但什么都不适合我。

<?php
function listAlbums(){
    if ($handle = opendir('./photos/')) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                echo $entry . "<br/>";
            }
        }
        closedir($handle);
    }
}

?>

输出:Folder02Folder01。我需要换一种方式。我已经尝试过asort、array_reverse等,但我一定没有正确使用它们。这让我很难过。我从来没有在Python或Javascript中对此进行过精简,除非我真的想有一个升序列表。。。

试试其中一个,一个是递归的,一个不是:

// Recursive
function listAlbums($path = './photos/')
    {
        $objects    =   new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
        foreach($objects as $name => $object) {
            ob_start();
            echo rtrim($object,".");
            $data   =   ob_get_contents();
            ob_end_clean();
            $arr[] = $data;
        }
        return array_unique($arr);
    }
// Non-recursive
function getAlbums($path = './photos/')
    {
        $objects    =   dir($path);
        while (false !== ($entry = $objects->read())) {
            if($entry !== '.' && $entry !== '..')
                $arr[]  =   $path.$entry;
        }
        $objects->close();
        return $arr;
    }
// I would use __DIR__, but not necessary
$arr    =   listAlbums();
$arr2   =   getAlbums();
// Reverse arrays by key
krsort($arr);
krsort($arr2);
// Show arrays
print_r($arr);
print_r($arr2);

我尝试了你的代码并进行了简单的更改,我可以做你想做的事情。

这是我的代码(您的代码副本+修改):

function listAlbums() {
$files = array();
if ($handle = opendir('./photos/')) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
            //echo $entry . "<br/>";
            $files[] = $entry;
        }
    }
    closedir($handle);
}
// Sort your folder in ascending order
sort($files);
// Sort your folder in descending order [ code commented ]
//rsort($files);
// Check your photos folder has folder or not 
if( !empty( $files ) ) {
    // Show Your Folders 
    foreach ($files as $key => $folderName ) {
        echo $folderName . "<br/>";
    }
} else {
    echo 'You have no folder yet in photos directory';
}

}

我的更改:

  1. 首先将照片目录中的所有文件夹存储在数组变量中
  2. 其次,根据需要对数组进行排序
  3. 最后显示您的文件夹(您的工作将得到解决)

您可以通过在php中使用opendir按字母顺序排序和显示目录列表来了解更多信息

感谢

好吧,这是我整晚得到的最好的结果。这能满足我99%的需求。但我还是搞不清楚这个该死的问题。这段代码将遍历目录列表,并用每个文件夹中的图像创建灯箱库。然而,第一个图像总是数组中的最后一个,我不知道该如何正常排序!查看第16行,看看我在说什么。

<?php
function listAlbums(){
    $directory = "./photos/";
    //get all folders in specified directory
    $folders = glob($directory . "*");
    //get each folder item name
    foreach($folders as $folderItem){
        //check to see if the folderItem is a folder/directory
        if(is_dir($folderItem)){
            $count = 0;
            foreach (new DirectoryIterator($folderItem) as $fileInfo) {
                if($fileInfo->isDot()) continue;
                $files = $folderItem."/".$fileInfo->getFilename();
                if ($count == 0){  //This is where my issues start.  This file ends up being the last one in the list.  I need it to be the first.
                    echo '<a href="'.$files.'" data-lightbox="'.basename($folderItem).' "data-title="'.basename($files).'">'.basename($folderItem).'</a>' . "<br/>";
                    echo "<div style='display: none'>" . "<br/>";
                    $count++;
                }else{
                    echo '<a href="'.$files.'" data-lightbox="'.basename($folderItem).' "data-title="'.basename($files).'">'.basename($folderItem).'</a>' . "<br/>";
                }
            }echo "</div>"; 
        }
    }
}       

?>

哇!好的,我把一切都安排好了。DirectoryTerator的随机打印顺序让我很恼火。所以我又回到了地球和丑闻。这些似乎"合乎逻辑"地打印出了一份清单。总之,这部分php将抓取图像文件夹,并将每个文件夹变成自己的灯箱库。每个库都显示为一个超链接,用于触发灯箱库。我很高兴!

这是我的最后一个代码:

<?php
function listAlbums(){
    $directory = "./photos/";
    //get all folders in specified directory
    $folders = glob($directory . "*");
    //get each folder item name
    foreach($folders as $folderItem){
        //check to see if the folderItem is a folder/directory
        if(is_dir($folderItem)){
            $count = 0;
            $scanDir = scandir($folderItem);
            foreach($scanDir as $file){
                if ($file === '.' || $file === '..') continue;
                $filePath = $folderItem."/".$file;
                if ($count == 0){
                    echo '<a href="'.$filePath.'" data-lightbox="'.basename($folderItem).' "data-title="'.basename($folderItem)." ".strpbrk(basename($filePath, ".jpg"), '-').'">'.basename($folderItem).'</a>' . "<br/>";
                    echo "<div style='display: none'>" . "<br/>";
                    $count++;
                }else{
                    echo '<a href="'.$filePath.'" data-lightbox="'.basename($folderItem).' "data-title="'.basename($folderItem)." ".strpbrk(basename($filePath, ".jpg"), '-').'">'.basename($folderItem).'</a>' . "<br/>";
                }
            }echo "</div>";
        }
    }
}       

特别感谢Rasclatt在这一切中一直陪伴着我,并提供了很多帮助和帮助。我真的很感激!