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

Foreach loop depending on files in directory

有没有办法创建一个 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 循环应该 运行 遍历与该人相关的所有文件。

目前我只有一个 hard-coded 我想要循环的块实例。

<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

等那么我如何对其进行编码,以便它可以提取正确的文件(两个一组,因为我在每个文件之前和之后都有一个前后),用于患者姓名和程序?

更新:

这段代码也returns没有,不知道为什么? $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,但这取决于您的条件。