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

时间:2015-02-17 15:08:03

标签: php wordpress loops 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) {

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您可以使用glob()功能。您可以将第一个参数作为模式传递并循环遍历函数的结果。

实施例

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

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