我在admin
文件夹(Windows,本地主机)中有一个文件夹/文件树。
所有文件均为.html
。
其中每个(文件和文件夹)都以一些数字和中间的破折号开头
32-somefolder
624-somefile.html
我需要列出所有这些名称,并从其名称中删除所有前缀。 所以结果应该是:
somefolder
somefile.html
foreach(glob("admin/*") as $el) {
echo $el . '.' . filetype($el) . '<br>';
}
第一个问题-仅列出文件夹:
admin/32-somefolder.dir
如何获取文件以及如何重命名,即从所有名称中删除前缀?
答案 0 :(得分:0)
您可以使用第二个选择列出文件:scandir
和递归函数:
function removePrefixFiles($dir, &$results = array()){
$files = scandir($dir);
foreach ($files as $key => $value){
$path = realpath($dir . DIRECTORY_SEPARATOR . $value);
if (! is_dir($path)) {
// treat the filename
$file = pathinfo($path);
$filename = explode('-', $file['filename']);
if (count($filename) > 0) {
// '-' is found, rename file
rename($path, $file['dirname'] .'/'. $filename[1] .'.'. $file['extension'];
}
$results[] = $path;
} else if ($value != '.' && $value != '..') {
removePrefixFiles($path, $results);
$results[] = $path;
}
}
// no real need to return something here, but can log the files
return $results;
}
$dir = '/admin';
removePrefixFiles($dir);
答案 1 :(得分:0)
我在admin /名称中创建了两个文件夹,
1个文件和2个abc
然后在文件夹1个文件中,我有两个文件
11-java.html
11-text.html
然后在2-abc文件夹中,我有两个文件
22-php.html
22-sql.html
<?php
$dir = "admin/";
// Sort in ascending order - this is default
$a = scandir($dir);
echo "<pre>";
if(count($a)>0){
$newArr = array();
for($i=2;$i<count($a);$i++){
$test = array();
$folderArr = array();
$folderName = explode('-',$a[$i]);
$test['folder'] = $folderName[1];
$b = scandir($dir.'/'.$a[$i]);
for($j=2;$j<count($b);$j++){
$fileName = explode('-',$b[$j]);
$folderArr[] = substr($fileName[1], 0, strpos($fileName[1], "."));;
}
$test['files'] = $folderArr;
$newArr[] = $test;
}
}
print_r($newArr);
?>
这将是输出
Array
(
[0] => Array
(
[folder] => files
[files] => Array
(
[0] => java
[1] => text
)
)
[1] => Array
(
[folder] => abc
[files] => Array
(
[0] => php
[1] => sql
)
)
)
希望这会吓到你。