学习PHP。存在递归目录循环问题
因此,我熟悉Javascript、HTML和Python。我从来没有学过PHP,现在,我正把头撞在桌子上,试图弄清楚(对我来说)什么是如此简单的事情 我有一个包含图像的文件夹和其他文件夹 目前,我只是想得到一个文件夹列表作为链接。我得到了一些,但我的输出总是相反的学习PHP。存在递归目录循环问题,php,Php,因此,我熟悉Javascript、HTML和Python。我从来没有学过PHP,现在,我正把头撞在桌子上,试图弄清楚(对我来说)什么是如此简单的事情 我有一个包含图像的文件夹和其他文件夹 目前,我只是想得到一个文件夹列表作为链接。我得到了一些,但我的输出总是相反的Folder01,Folder02以Folder02,Folder01的形式出现。我无法对输出进行快速排序。我一直在寻找,试图找出这一点,但没有任何工作为我 <?php function listAlbums(){ if
Folder01
,Folder02
以Folder02
,Folder01
的形式出现。我无法对输出进行快速排序。我一直在寻找,试图找出这一点,但没有任何工作为我
<?php
function listAlbums(){
if ($handle = opendir('./photos/')) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != "..") {
echo $entry . "<br/>";
}
}
closedir($handle);
}
}
这将输出:Folder02
,Folder01
。我需要另一种方式。我试过使用asort、array\u 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);
我尝试了你的代码并做了简单的更改,我可以做你想做的事情
这是我的代码(代码副本+修改):
函数列表相册(){
$files=array();
如果($handle=opendir('./photos/')){
while(false!==($entry=readdir($handle))){
如果($entry!=“&&&$entry!=”){
//回显$entry.“
”;
$files[]=$entry;
}
}
closedir($handle);
}
//按升序对文件夹进行排序
排序($文件);
//按降序排列文件夹[代码注释]
//rsort(文件);
//检查您的照片文件夹是否有文件夹
如果(!空($files)){
//显示您的文件夹
foreach($key=>$folderName形式的文件){
echo$folderName。“
”;
}
}否则{
echo“照片目录中还没有文件夹”;
}
}
我的更改:
首先将所有文件夹存储在数组变量的photos目录中
其次,根据需要对数组进行排序李>
最后显示您的文件夹(您的工作将得到解决)
你可以从中了解更多
谢谢好的,这是我整晚得到的最好的结果。这是我需要的99%。但我还是搞不懂这类问题。这段代码将遍历目录列表,并使用每个文件夹中的图像创建lightbox库。但是,第一个图像总是数组中的最后一个图像,我不知道如何才能让它正常排序!检查第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>";
}
}
}
哇!好的,我把一切都搞定了。DirectoryIterator的随机打印顺序让我很生气。所以我又回到了glob和scandir。这些似乎“合乎逻辑地”打印出一份清单。总之,这段php将抓取图像文件夹,并将每个文件夹转换为自己的lightbox库。每个图库显示为一个超链接,可触发灯箱图库。我很满意
这是我最后的代码:
<?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>";
}
}
}
试试scandir('./photos/')
相反,看看这个列表是否更好。还有一个directoryinterator
对象可能是另一个选项。你也可以试试dir()
。如果你在寻找递归,使用recursivedirectoryinterator
我使用了recursivedirectoryinterator,这会给我带来一些更好的信息,但这并不能解决我的问题,我的列表顺序颠倒了。有什么补救的建议吗?所有内容都是从最高到最低打印的,我需要从另一个角度来打印。谢谢你这么做,但我无法让任何内容正常工作。我无法得到一个结果来证明我尝试了这两种方法。如果你想看一看的话,我正在发布一些让我离目标更近的东西。[]这家伙似乎和我有同样的问题。在使用DirectoryIterator之后,他的文件是随机生成的,而不是按字母顺序递增的。但我不能让他的解决方案为我工作,我也不确定它如何适合我自己的循环。他提到了一些关于为usort函数创建自己的比较器的事情,但我无法让它在我当前的代码中工作。有什么想法吗?
<?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>";
}
}
}