Foreach循环取决于目录中的文件

有没有一种方法来创建一个foreach循环,这将运行的目录中存在一个序号的文件名的多个实例?

例如,我有一个目录与图像。 图像将具有如下所示的文件名:

firstname-lastname_before1.jpg
firstname-lastname_after1.jpg
firstname-lastname_before2.jpg
firstname-lastname_after2.jpg
firstname2-lastname2_before1.jpg
firstname2-lastname2_after1.jpg
firstname2-lastname2_before2.jpg
firstname2-lastname2_after2.jpg

这基本上显示了属于两个人的照片。 每个人有四张照片,两张两张照片,一张前后。

我可以在回声时处理个别名称,但我试图找到一种设置foreach循环的方法,该循环将查找当前应用的条件的所有顺序实例。

即如果我正在查看一个人的页面,则foreach循环应该贯穿与该人相关的所有文件。

目前我只有一个硬编码的我想要循环的块的实例。

<div class="photo-set col-md-4">
<figure class="cd-image-container">
<?php $procedure = get_post_custom_values('Procedure'); ?>
<img src="<?php echo get_template_directory_uri()."/img/before-after/".preg_replace("/[s_]/", "-", strtolower($procedure[0]))."_".preg_replace("/[s_]/", "-", strtolower($post->post_title))."_after1.jpg";?>" alt="Original Image">
<span class="cd-image-label" data-type="original">After</span>
<div class="cd-resize-img">
<img src="<?php echo get_template_directory_uri()."/img/before-after/".preg_replace("/[s_]/", "-", strtolower($procedure[0]))."_".preg_replace("/[s_]/", "-", strtolower($post->post_title))."_before1.jpg";?>" alt="Modified Image">
<span class="cd-image-label" data-type="modified">Before</span>
</div>
<span class="cd-handle"></span>
</figure>
</div> 

这只是使用before1和after1,因为我想先设计它。

所以总结一下,我的问题是:我可以有一个foreach循环,它可以找到所有符合下面条件的文件,按顺序命名,并将它们排序为一组2(前后)?

更新:

我试过使用glob函数,但我真的不确定这是我正在寻找的。 使用此代码后:

$procedures = get_post_custom_values('Procedure');
$procedure = preg_replace("/[s_]/", "-", strtolower($procedures[0]));
$patientName = preg_replace("/[s_]/", "-", strtolower($post->post_title));
foreach(glob('img/before-after/*$patientName*/*.jpg') as $filename) {

网页上没有任何内容被返回。 我不确定glob表达式应该如何。 因为它需要首先找到一个匹配$ patientName的目录,然后在标题中有大量不同过程的文件。 像这样一个例子:

tummy-tuck_john-smith_before1.jpg
tummy-tuck_john-smith_after1.jpg
tummy-tuck_john-smith_before2.jpg
tummy-tuck_john-smith_after2.jpg
nose-reshaping_john-smith_before1.jpg
nose-reshaping_john-smith_after1.jpg

等等。所以我怎么能编码它,以便它将拉出正确的文件(两套,因为我有一个前后每个),患者姓名和程序?

更新:

此代码也不会返回任何内容,我不知道为什么? $ files数组返回为0。

$procedures = get_post_custom_values('Procedure');
$procedure = preg_replace("/[s_]/", "-", strtolower($procedures[0]));
$patientName = preg_replace("/[s_]/", "-", strtolower($post->post_title));
$directory = get_template_directory_uri()."/img/before-after/".$patientName."/";
$files = glob($directory.'*', GLOB_BRACE);
foreach($files as $filename) {

有人可以帮忙吗?


你可以使用glob()函数。 您可以将第一个参数作为模式传递并循环访问该函数的结果。

 foreach(glob('[a-zA-Z0-9]+-[a-zA-Z_0-9]+.jpg') as $filename)
 {
    echo $filename;
 }

您也可以使用w但这取决于您的条件。

链接地址: http://www.djcxy.com/p/47809.html

上一篇: Foreach loop depending on files in directory

下一篇: getting wrong results from foreach