从目录和子目录中获取数组中的所有图像

时间:2014-12-09 19:51:56

标签: javascript php

目前我与以下树结构类似:

+images
    +sub-directory
       -image1.jpg
       -image2.jpg
    +sub-directory-2
       -image3.jpg
       -image4.jpg
    -some-image.jpg
    -another.jpg

<script>
<?php
//path to directory to scan. i have included a wildcard for a subdirectory
$directory = "images/*/";

//get all image files with a .jpg extension.
$images = glob("" . $directory . "*.jpg");

$imgs = '';
// create array
foreach($images as $image){ $imgs[] = "$image"; }
echo "var allImages = ".$imgs.";\n";
?>

console.log(allImages);
</script>

由于我对php非常陌生,我会盲目地在控制台中以Array()身份登录。

另外,我设置$directory = "images/*/";只能获取子文件夹中的所有图片,但不会在父目录中获取可能images/some-image.jpg的图像,我也希望得到它。


我希望像这样的数组中的所有图像(当我使用console.log(allImages);时):

['some-image.jpg','another.jpg','image1.jpg','image2.jpg','image3.jpg','image4.jpg']

3 个答案:

答案 0 :(得分:4)

我喜欢JSON,让事情变得简单明了:

<?php
$images = glob("images/*/*.jpg");
$imgs = array();
foreach($images as $image){ $imgs[] = $image; }
?>
<script>
    var allImages = JSON.parse('<?php echo json_encode($imgs);?>');
    console.log( allImages);
</script>

现在你有了javascript中的php数组,具有相同的结构。你可以使用for循环它们,如果你有jQuery,$.each() 我将代码更改为你的风格(混合php和html),但是你应该尝试将它们分成htmltemplates。


我不是100%肯定这一点,但是你可以在你的全局中使用正则表达式,如果这样做你不需要foreach,这将只返回文件名:

$images = glob("~(?:images/*/)*\.jpg~");

答案 1 :(得分:1)

这个怎么样:

<script>

<?php

$directory = "images/*/";

$images = glob("" . $directory . "*.jpg");

echo "var allImages = ['".implode("', '", $images)."'];\n";

?>

console.log(allImages);

</script>

答案 2 :(得分:1)

递归函数怎么样?

function loadImages($folder)
{
    $files = glob($folder);
    foreach( $files as $file )
    {
        if(is_dir($file))
        {
            loadImages($file);
        } else {
            $images[] = $file; // add some file type validation here
        }
    }

    return $images;
}

$images = json_encode(loadImages($startFolderPath));

我在iPad上,所以我无法测试它。