我试图为一个目录编制索引,例如它看起来像files/subdir/file.txt
,只有一个子目录和文件。我将第一个目录存储在$dir = "files/"
中,然后想要一个文件的目录减去$dir中的值。我用$curdir = str_replace( $dir, '', $file->getPath() )
尝试过它,但当我用$curdir = str_replace( 'files/', '', $file->getPath() )
尝试它时它不起作用,它确实起作用,为什么我缺少这一点?
清除
<?php
$dir = 'files/';
$files = new ArrayObject();
$dir_iterator = new RecursiveDirectoryIterator($dir);
$iterator = new RecursiveIteratorIterator($dir_iterator,RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $file) {
if( $file->getFilename()[0] == '.' ){ continue; }
$curdir = str_replace( $dir, '', $file->getPath() );
$files[$curdir][] = $file;
}
print_r($files);
它不断返回这个
ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
[files/subdir] => Array
(
[0] => SplFileInfo Object
(
[pathName:SplFileInfo:private] => files'subdir'file.txt
[fileName:SplFileInfo:private] => file.txt
)
)
)
)
但我希望它返回以下
ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
[subdir] => Array
(
[0] => SplFileInfo Object
(
[pathName:SplFileInfo:private] => files/subdir'file.txt
[fileName:SplFileInfo:private] => file.txt
)
)
)
)
解决方案:
安德鲁建议我使用FilesystemIterator::UNIX_PATHS
解决了这个问题
$dir_iterator = new RecursiveDirectoryIterator($dir, FilesystemIterator::UNIX_PATHS);
我认为问题在于SPL根据系统默认值在文件路径中返回'
,因此设置
FilesystemIterator::UNIX_PATHS
设置使SPL始终返回'
以清除不确定性;并且替换为CCD_ 8而不是CCD_。这也是我最初遇到的许多麻烦:)