读取某个文件夹中的所有子目录以显示随机图像

时间:2010-06-17 20:46:42

标签: php

我有这个代码我一直在使用....但我需要一个条件,它将读取/ bg的所有子目录以选择图像而不是特定文件夹,如果它们在子页面上。

到目前为止,我的代码完全适用于所有子页面以显示特定图像:

//This would tell us its on the homepage if it helps:
$this->level() == 0

//This is the code so far
$path = '/home/sites/mydomain.co.uk/public_html/public/images/bg/'.$this->slug;


$homepagefile = URL_PUBLIC.'public/images/bg/'.$this->slug.'/main.jpg';

$bgimagearray = array();
$iterator = new DirectoryIterator($path);
foreach ($iterator as $fileinfo) {
    if ($fileinfo->isFile() && !preg_match('\.jpg$/', $fileinfo->getFilename())) {
        $bgimagearray[] = "'" . $fileinfo->getFilename() . "'";
    }
}

$bgimage = array_rand($bgimagearray);

?>

<div id="bg">
    <div>
        <table cellspacing="0" cellpadding="0">
            <tr>
                <td><img src="<?php echo $file.trim($bgimagearray[$bgimage], "'"); ?>" alt=""/></td>
            </tr>
        </table>
    </div>
</div>

任何帮助都会受到赞赏,我确定它不是火箭科学,但我已经尝试了几种方法而且无法理解它。

提前致谢。

2 个答案:

答案 0 :(得分:0)

$Directory = new RecursiveDirectoryIterator($path);
$Iterator = new RecursiveIteratorIterator($Directory);
$Images = new RegexIterator($Iterator, '/^.+\.jpg$/i', RecursiveRegexIterator::GET_MATCH);

foreach ($Images as $pathname) {
    $bgimagearray[] = $pathname;
}

编辑:我的错误,正则表达式必须与整个路径匹配,而不仅仅是扩展名。在使用RegexIterator进行过滤后,该值只是路径,而不是fileinfo对象。我编辑了上面的代码来修复它。我用PHP 5.3.2进行了测试。

答案 1 :(得分:0)

这就是我想出来的。虽然没有测试过......

<?php
$isHome = $this->level() == 0

$path = '/home/sites/mydomain.co.uk/public_html/public/images/bg/';
if (!$isHome) $path .= $this->slug;

$homepagefile = URL_PUBLIC.'public/images/bg/'.$this->slug.'/main.jpg';

$bgimagearray = array();
$iterator = new DirectoryIterator($path);
foreach ($iterator as $fileinfo) {
    if ($fileinfo->isFile() && !preg_match('\.jpg$/', $fileinfo->getFilename()) &&  !$isHome) {
        $bgimagearray[] = "'" . $fileinfo->getFilename() . "'";
    } else if ($fileinfo->isDir() && $isHome) {
        $iterator2 = new DirectoryIterator($path . $fileinfo->getFilename());
        foreach ($iterator2 as $fileinfo2) {
            if ($fileinfo2->isFile() && !preg_match('\.jpg$/', $fileinfo2->getFilename())) {
                $bgimagearray[] = "'" . $fileinfo->getFilename() . '/' . $fileinfo2->getFilename() . "'";
            }
        }
    }
}

$bgimage = array_rand($bgimagearray);

?>

<div id="bg">
    <div>
        <table cellspacing="0" cellpadding="0">
            <tr>
                <td><img src="<?php echo $file.trim($bgimagearray[$bgimage], "'"); ?>" alt=""/></td>
            </tr>
        </table>
    </div>
</div>