You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中SplFileInfo对象转数组问题求助

问题解决:获取目录文件的完整信息数组

原代码存在的问题

  1. 过滤逻辑错误:原代码通过strpos($file, ".", -1)判断是否跳过文件,会误过滤所有带扩展名的正常文件(如xxx.jpg),且判断方式依赖对象转字符串的隐式转换,不够可靠。
  2. 存储对象无法直接访问属性:直接将SplFileInfo对象存入数组,其私有属性无法直接读取,需要通过类的公共方法提取信息。

修改后的代码

<?php
function getDirectoryListing($path)
{
    $dir_iterator = new RecursiveDirectoryIterator($path);
    $iterator = new RecursiveIteratorIterator($dir_iterator, RecursiveIteratorIterator::SELF_FIRST);
    $files = array();
    
    foreach($iterator as $file)
    {
        // 正确跳过.和..目录
        if($file->isDot()) {
            continue;
        }
        
        // 通过SplFileInfo的公共方法提取所有需要的信息,存入关联数组
        $files[] = array(
            'pathname' => $file->getPathname(),
            'filename' => $file->getFilename(),
            'basename' => $file->getBasename(),
            'size' => $file->getSize(),
            'last_modified' => $file->getMTime(),
            'is_dir' => $file->isDir(),
            'is_file' => $file->isFile()
            // 可根据需求添加更多方法返回的信息,比如getExtension()、getOwner()等
        );
    }
    
    return $files;
}

$files = getDirectoryListing("I:\cef-inc.net/images/database/");
print_r($files);
?>

关键修改点说明

  • 替换过滤逻辑:使用SplFileInfo::isDot()方法精准判断当前项是否为.或..,避免误过滤正常文件。
  • 提取对象信息:不再直接存储SplFileInfo对象,而是通过其提供的公共方法(如getPathname()、getFilename()等)提取所需信息,存入关联数组,这样后续遍历数组时可以直接访问这些属性。

内容的提问来源于stack exchange,提问作者CharlesEF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:50:32