PHP:先对文件夹排序,然后对文件排序
如何先对文件夹进行排序,然后对文件进行排序?您不需要进行两次循环,您可以使用以下代码完成此工作:PHP:先对文件夹排序,然后对文件排序,php,sorting,directory,Php,Sorting,Directory,如何先对文件夹进行排序,然后对文件进行排序?您不需要进行两次循环,您可以使用以下代码完成此工作: images (folder) index.html javascript (folder) style.css 试试这个: <?php function scandirSorted($path) { $sortedData = array(); foreach(scandir($path) as $file) { // Skip the . a
images (folder)
index.html
javascript (folder)
style.css
试试这个:
<?php
function scandirSorted($path) {
$sortedData = array();
foreach(scandir($path) as $file) {
// Skip the . and .. folder
if($file == '.' || $file == '..')
continue;
if(is_file($path . $file)) {
// Add entry at the end of the array
array_push($sortedData, '<li class="folder">' . $file . '</li>');
} else {
// Add entry at the begin of the array
array_unshift($sortedData, '<li class="file">' . $file . '</li>');
}
}
return $sortedData;
}
?>
$dir='/master/files';
$directories=array();
$files_list=array();
$files=scandir($dir);
foreach($files作为$file){
如果(($file!='.')&($file!='.')){
if(is_dir($dir./'.$file)){
$directories[]=$file;
}否则{
$files\u list[]=$file;
}
}
}
foreach($directory作为$directory){
回显“”.$directory. ”;
}
foreach($files\u列表为$file\u列表){
回显“”.$file\u列表。” ;
}
尽可能少地修改代码:
$dir = '/master/files';
$directories = array();
$files_list = array();
$files = scandir($dir);
foreach($files as $file){
if(($file != '.') && ($file != '..')){
if(is_dir($dir.'/'.$file)){
$directories[] = $file;
}else{
$files_list[] = $file;
}
}
}
foreach($directories as $directory){
echo '<li class="folder">'.$directory.'</li>';
}
foreach($files_list as $file_list){
echo '<li class="file">'.$file_list.'</li>';
}
$folder_list=”“;
$file_list=“”;
$dir='/master/files';
$files=scandir($dir);
foreach($files作为$file){
如果(($file!='.')&($file!='.')){
if(is_dir($dir./'.$file)){
$folder_list.=''.$file. ';
}否则{
$file_list.=''.$file. ';
}
}
}
打印$folder\u列表;
打印$file\u列表;
这只需在所有内容中循环一次,而不需要多次循环。将输出存储在两个数组中,然后遍历数组,以正确的顺序输出它们
$folder_list = "";
$file_list = "";
$dir = '/master/files';
$files = scandir($dir);
foreach($files as $file){
if(($file != '.') && ($file != '..')){
if(is_dir($dir.'/'.$file)){
$folder_list .= '<li class="folder">'.$file.'</li>';
}else{
$file_list .= '<li class="file">'.$file.'</li>';
}
}
}
print $folder_list;
print $file_list;
$dir='/master/files';
$contents=scandir($dir);
//创建空白数组以存储文件夹和文件
$folders=$files=array();
foreach($file形式的内容){
如果(($file!='.')&($file!='.')){
if(is_dir($dir./'.$file)){
//添加到文件夹阵列
$folders[]=$file;
}否则{
//添加到文件数组
$files[]=$file;
}
}
}
//输出文件夹
foreach($folders作为$folder){
回显“”.$folder. ”;
}
//输出文件
foreach($files作为$file){
回显“”.$file. ”;
}
试试看
我有一个N深度递归目录扫描的解决方案:
<?php
$path = $_SERVER['DOCUMENT_ROOT'];
chdir ($path);
$dir = array_diff (scandir ('.'), array ('.', '..', '.DS_Store', 'Thumbs.db'));
usort ($dir, create_function ('$a,$b', '
return is_dir ($a)
? (is_dir ($b) ? strnatcasecmp ($a, $b) : -1)
: (is_dir ($b) ? 1 : (
strcasecmp (pathinfo ($a, PATHINFO_EXTENSION), pathinfo ($b, PATHINFO_EXTENSION)) == 0
? strnatcasecmp ($a, $b)
: strcasecmp (pathinfo ($a, PATHINFO_EXTENSION), pathinfo ($b, PATHINFO_EXTENSION))
))
;
'));
header ('content-type: text/plain');
print_r ($dir);
?>
作为一名CodeIgniter爱好者,我实际上修改了core目录_helper,除了设置深度和选择是否应包含隐藏文件外,还可以使某些文件免于扫描
所有功劳都归于词的原始作者。我只是加了一句
在排序中使用豁免数组和构建
它使用ksort对文件夹进行排序,因为文件夹名称被设置为键,而natsort对每个文件夹中的文件进行排序
您可能需要做的唯一一件事是为您的环境定义目录分隔符,但我认为您不需要修改太多其他内容
function scanRecursively($dir = "/") {
$scan = array_diff(scandir($dir), array('.', '..'));
$tree = array();
$queue = array();
foreach ( $scan as $item )
if ( is_file($item) ) $queue[] = $item;
else $tree[] = scanRecursively($dir . '/' . $item);
return array_merge($tree, $queue);
}
如上所述,它将文件夹名称设置为子数组的键,因此您可以预期以下内容:
$filelist = directory_map('full_server_path');
请记住,豁免将应用于所有文件夹。如果您想跳过index.html文件或不希望包含的目录中使用的其他文件,这很方便。首先将它们保存在两个数组中,然后打印它们(首先是文件夹,然后是文件):)您的意思是我必须创建两个“foreach”?一个用于文件夹,然后用于文件?我认为两个foreach不好,在创建数组时保存li,然后使用内爆打印更好在循环中键入是个好主意,但这不会对文件夹或文件进行排序a-z
顺序。实际上,如果顺序很重要,则必须使用两个数组
function scanRecursively($dir = "/") {
$scan = array_diff(scandir($dir), array('.', '..'));
$tree = array();
$queue = array();
foreach ( $scan as $item )
if ( is_file($item) ) $queue[] = $item;
else $tree[] = scanRecursively($dir . '/' . $item);
return array_merge($tree, $queue);
}
function directory_map($source_dir, $directory_depth = 0, $hidden = FALSE, $exempt = array())
{
if ($fp = @opendir($source_dir))
{
$folddata = array();
$filedata = array();
$new_depth = $directory_depth - 1;
$source_dir = rtrim($source_dir, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;
while (FALSE !== ($file = readdir($fp)))
{
// Remove '.', '..', and hidden files [optional]
if ($file === '.' OR $file === '..' OR ($hidden === FALSE && $file[0] === '.'))
{
continue;
}
is_dir($source_dir.$file) && $file .= DIRECTORY_SEPARATOR;
if (($directory_depth < 1 OR $new_depth > 0) && is_dir($source_dir.$file))
{
$folddata[$file] = directory_map($source_dir.$file, $new_depth, $hidden, $exempt);
}
elseif(empty($exempt) || !empty($exempt) && !in_array($file, $exempt))
{
$filedata[] = $file;
}
}
!empty($folddata) ? ksort($folddata) : false;
!empty($filedata) ? natsort($filedata) : false;
closedir($fp);
return array_merge($folddata, $filedata);
}
return FALSE;
}
$filelist = directory_map('full_server_path');
Array(
[documents/] => Array(
[0] => 'document_a.pdf',
[1] => 'document_b.pdf'
),
[images/] => Array(
[tn/] = Array(
[0] => 'picture_a.jpg',
[1] => 'picture_b.jpg'
),
[0] => 'picture_a.jpg',
[1] => 'picture_b.jpg'
),
[0] => 'file_a.jpg',
[1] => 'file_b.jpg'
);