学习PHP。有递归目录循环问题

时间:2015-12-06 02:55:49

标签: php

所以,我熟悉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);
    }
}

&GT;

此输出:Folder02Folder01。我反过来需要它。我已经尝试了asort,array_reverse等,但我一定不能正确使用它们。这让我很难过。除非我真的想要一个升序列表,否则我甚至不必在Python或Javascript中对此进行细化......

4 个答案:

答案 0 :(得分:1)

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

// 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);

答案 1 :(得分:1)

我尝试使用您的代码并进行简单的更改,然后我就可以执行您想要的操作。

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

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. 最后显示您的文件夹(并且您的工作将得到解决)
  4. 您可以从sort-and-display-directory-list-alphabetically-using-opendir-in-php

    了解更多相关信息

    由于

答案 2 :(得分:0)

好的,这是我整晚都得到的最好结果。这完成了我所需要的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>"; 
        }
    }
}       

&GT;

答案 3 :(得分:0)

呼!好的,我把一切都搞定了。 DirectoryIterator以随机打印顺序惹恼了我。所以我又回到了glob和scandir。那些似乎“按逻辑”打印出一个列表。总而言之,这一点的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与我一起承担所有这些并提供了大量的手持和帮助。我真的很感激!