从部分子目录名称(按命名方式过滤)中随机选择


Choose Randomly from Names of Certain Sub-Directories (Filtered by Naming Pattern)

好了,我已经把这个问题重写了几次了。我有一个目录images。它包含66个子目录,这些子目录遵循date_filenumber (YYYYMMDD_1234)格式并包含图像,以及少数其他不包含图像的子目录。我只想获得66个,随机选择其中一个,然后将其图像的路径插入HTML中。我快到了:

PHP
$A = glob('images/????????_????');
$B = array_rand($A);
$path = ($A[$B]).'/1x.jpg'
HTML
<img src="<?php echo $path;?>">

但这给了我<img src="images/YYYYMMDD_1234/1x.jpg"。我只想要<img src="YYYYMMDD_1234/1x.jpg">

这就是我被困住的地方。想法吗?

glob()的目录使用GLOB_ONLYDIR(以防那里可能有文件),然后排除包括preg_grep()使用PREG_GREP_INVERT:

$dirs = preg_grep('/includes/', glob('images/*', GLOB_ONLYDIR), PREG_GREP_INVERT);

如果将来您添加了不想要的其他目录,那么只获取与您的命名模式匹配的目录:

$dirs = preg_grep('/'d{8}_'d{4}$/', glob('images/*', GLOB_ONLYDIR));

或者对于你的简单模式:

$dirs = glob('*_*', GLOB_ONLYDIR);

使用glob()substr():

$foldersArray = array();
foreach(glob('images/*') as $folder)  {
    if (strpos($folder, "includes") !== 0) {
        if (strpos($folder, ".") === false) $foldersArray[] = $folder; //exclude files
    }
}