首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用basename()

使用basename()
EN

Stack Overflow用户
提问于 2013-11-18 22:40:25
回答 2查看 637关注 0票数 0

我们有一个程序,它将图像导出为.bmp,并创建相关的.txt文件。每个文件都是递增生成的,因此第一个文件集命名为0.bmp和0.txt,第二个1.bmp和1.txt,等等。

代码语言:javascript
复制
    <?php 
    $dir = "Photos/Marshfield/*";
    foreach(glob($dir) as $sub)    
    {
        $path = $sub."/*";
        foreach(glob($path) as $file)
        {
            echo "<img src=".$file.">";
        }
    }       
    ?>

为了进一步解决问题,当您回显$base时,您会得到以下内容:0.bmp0.txt1.bmp1.txt2.bmp2.txt3.bmp3.txt4.bmp4.txt5.bmp5.txt6,它将该文件视为这两个部分。老实说,我今天花了大部分时间学习php,以至于我能够把上面的内容组合在一起。不太懂这门语言,有人能给我提供一些指导,说明我如何确保每个目录下适当的图像/文本关联是正确的吗?我想如果我能把这两者分开,我也许能做得更好,但我不确定最好的方法是什么。

在指定的目录"Photos/Marshfield“中,每个目录中都有一系列目录(例如D1、D2、D3等),其中每个目录都有一个文件列表,每个文件具有0.bmp/0.txt、1.bmp/1.txt等。我想做的是循环遍历所有目录和每个子目录( D1、D2等),匹配并显示图像文件和相应的文本文件。最初,我希望加入$dic和$base,我可以为图像调用源,因为它们是数字递增的。$dic将生成"Photos/Marshfield/D1,并使用我的.bmp文件的基本名称,我应该得到一个数字,当它被添加回.bmp完成文件路径时,我期望从basename()返回文件的字符串值(在本例中是0、1、2等),相反,它将返回0.bmp0.txt作为文件,我希望这有助于澄清。我还没有来得及生成读取文本文件的内容,尽管我有这个部分。“

我更新了代码,循环遍历路径$dir中标记为*的所有目录和子目录。该部分现在已经完成,只需将适当文本文件的内容捆绑在其中。

EN

回答 2

Stack Overflow用户

发布于 2013-11-18 23:06:50

您的语法对GLOB是错误的。我认为它需要一个目录路径和文件处理的模式。我想把它空着可能会把所有文件都还给我。

好吧..。我明白你的问题了。现在你增加了更多的细节。您要做的是遍历所有图像(或目录中的文本文件),然后检查图像和文本文件是否存在。

代码语言:javascript
复制
 <?php 
 $absPath = 'ABSOLUTE PATH TO YOUR FILES';
 $dir = $absPath . "Photos/Marshfield/";
 $matches = glob($dir."*.bmp");

 if(is_array($matches)) {
    $txtFile = '';
    foreach(glob($dir.'*.bmp') as $key=>$file ) {

      //Creates the base name without the extension
      $base = basename($file,".bmp");

      $txtFile = $base . $key .'.txt <br />';
      if(file_exists($txtFile)) {
         //File and Img
         echo $txtFile .'<br />';
         echo '<img src="'.$absPath . $dir. $base . $key . '.bmp" >';
      } else {
         echo 'No text file found';
         echo '<img src="'.$absPath . $dir. $base . $key . '.bmp" >';
      }

    }  
 }     
 ?>
票数 0
EN

Stack Overflow用户

发布于 2013-11-18 23:18:15

您可能希望在这里将RecursiveDirectoryIteratorFilterIterator一起使用:

代码语言:javascript
复制
class FileFilterIterator extends FilterIterator 
{
    public function accept()
    {
        $file = $this->getInnerIterator()->current();

        return ($file->getExtension() == 'bmp') && file_exists(
            "{$file->getPath()}/{$file->getBasename('bmp')}txt");
    }
}

foreach (new FileFilterIterator(new RecursiveIteratorIterator(
             new RecursiveDirectoryIterator('Photos/Marshfield'))) as $file) {
    printf('<img src="%s" />', $file->getPathname());
    printf('Text file: %s', "{$file->getPath()}/{$file->getBasename('bmp')}txt");
}

PS:我为您的评论添加了file_exists()检查,“我需要确保图像文件与它创建的正确文本文件相关联”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20059509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档