fel*_*hat 14 php sorting directory
php noob here - 我拼凑了这个脚本来显示一个带有opendir的文件夹中的图像列表,但我无法弄清楚如何(或在哪里)按字母顺序对数组进行排序
<?php
// opens images folder
if ($handle = opendir('Images')) {
while (false !== ($file = readdir($handle))) {
// strips files extensions
$crap = array(".jpg", ".jpeg", ".JPG", ".JPEG", ".png", ".PNG", ".gif", ".GIF", ".bmp", ".BMP", "_", "-");
$newstring = str_replace($crap, " ", $file );
//asort($file, SORT_NUMERIC); - doesnt work :(
// hides folders, writes out ul of images and thumbnails from two folders
if ($file != "." && $file != ".." && $file != "index.php" && $file != "Thumbnails") {
echo "<li><a href=\"Images/$file\" class=\"thickbox\" rel=\"gallery\" title=\"$newstring\"><img src=\"Images/Thumbnails/$file\" alt=\"$newstring\" width=\"300\" </a></li>\n";}
}
closedir($handle);
}
?>
Run Code Online (Sandbox Code Playgroud)
任何建议或指示将不胜感激!
zom*_*bat 23
在对文件进行排序之前,需要先将文件读入数组.这个怎么样?
<?php
$dirFiles = array();
// opens images folder
if ($handle = opendir('Images')) {
while (false !== ($file = readdir($handle))) {
// strips files extensions
$crap = array(".jpg", ".jpeg", ".JPG", ".JPEG", ".png", ".PNG", ".gif", ".GIF", ".bmp", ".BMP", "_", "-");
$newstring = str_replace($crap, " ", $file );
//asort($file, SORT_NUMERIC); - doesnt work :(
// hides folders, writes out ul of images and thumbnails from two folders
if ($file != "." && $file != ".." && $file != "index.php" && $file != "Thumbnails") {
$dirFiles[] = $file;
}
}
closedir($handle);
}
sort($dirFiles);
foreach($dirFiles as $file)
{
echo "<li><a href=\"Images/$file\" class=\"thickbox\" rel=\"gallery\" title=\"$newstring\"><img src=\"Images/Thumbnails/$file\" alt=\"$newstring\" width=\"300\" </a></li>\n";
}
?>
Run Code Online (Sandbox Code Playgroud)
编辑:这与您要求的内容无关,但您也可以通过pathinfo()函数获得更通用的文件扩展名处理.您不需要硬编码的扩展数组,您可以删除任何扩展名.
Ama*_*ali 10
opendir()opendir()不允许对列表进行排序.您必须手动执行排序.为此,首先将所有文件名添加到数组中,然后使用sort()以下内容对它们进行排序:
$path = "/path/to/file";
if ($handle = opendir($path)) {
$files = array();
while ($files[] = readdir($dir));
sort($files);
closedir($handle);
}
Run Code Online (Sandbox Code Playgroud)
并随后用一一列举foreach:
$blacklist = array('.','..','somedir','somefile.php');
foreach ($files as $file) {
if (!in_array($file, $blacklist)) {
echo "<li>$file</a>\n <ul class=\"sub\">";
}
}
Run Code Online (Sandbox Code Playgroud)
scandir()使用起来容易得多scandir().它默认为您执行排序.使用以下代码可以实现相同的功能:
$path = "/path/to/file";
$blacklist = array('somedir','somefile.php');
// get everything except hidden files
$files = preg_grep('/^([^.])/', scandir($path));
foreach ($files as $file) {
if (!in_array($file, $blacklist)) {
echo "<li>$file</a>\n <ul class=\"sub\">";
}
}
Run Code Online (Sandbox Code Playgroud)
DirectoryIterator(首选)$path = "/path/to/file";
$blacklist = array('somedir','somefile.php');
foreach (new DirectoryIterator($path) as $fileInfo) {
if($fileInfo->isDot()) continue;
$file = $path.$fileInfo->getFilename();
echo "<li>$file</a>\n <ul class=\"sub\">";
}
Run Code Online (Sandbox Code Playgroud)