我们有一个程序,它将图像导出为.bmp,并创建相关的.txt文件。每个文件都是递增生成的,因此第一个文件集命名为0.bmp和0.txt,第二个1.bmp和1.txt,等等。
<?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中标记为*的所有目录和子目录。该部分现在已经完成,只需将适当文本文件的内容捆绑在其中。
发布于 2013-11-18 23:06:50
您的语法对GLOB是错误的。我认为它需要一个目录路径和文件处理的模式。我想把它空着可能会把所有文件都还给我。
好吧..。我明白你的问题了。现在你增加了更多的细节。您要做的是遍历所有图像(或目录中的文本文件),然后检查图像和文本文件是否存在。
<?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" >';
}
}
}
?>发布于 2013-11-18 23:18:15
您可能希望在这里将RecursiveDirectoryIterator与FilterIterator一起使用:
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()检查,“我需要确保图像文件与它创建的正确文本文件相关联”。
https://stackoverflow.com/questions/20059509
复制相似问题