我有点困惑。
我正在构建一个PHP函数来循环显示指定目录中的图像。
PHP
$dir = "bilder/".$objekt[0]['objekt_nr']."/thumbnail/";
$thumbnails = scandir($dir);
print_r($thumbnails);
foreach ($thumbnails as $value) {
echo "<img src='".$dir.$value. "'>";
}
阵列
(
[0] => .
[1] => ..
[2] => bjornc.jpg
[3] => test_bild3.jpg
)
HTML
<img src='bilder/22159/thumbnail/.'>
<img src='bilder/22159/thumbnail/..'>
<img src='bilder/22159/thumbnail/bjornc.jpg'>
<img src='bilder/22159/thumbnail/test_bild3.jpg'>
我怎样摆脱theese点?
我猜这是导演点......
更新
最简单的方法是在php.net手册中找到的
$thumbnails = array_diff(scandir($dir), array('..', '.'));
答案 0 :(得分:6)
点目录是当前目录。 Dot-dot是父目录。
如果你想在一个目录中创建一个文件列表,你真的应该跳过那两个,或者真正的任何目录,从一个前导点开始(在Linux和OSX等POSIX系统上应该是那些是隐藏的目录)。
你可以通过检查文件名中的第一个字符是否为点,以及是否只是跳过它(即你continue
循环)来做到这一点。
答案 1 :(得分:3)
您可以使用in_array
作为
foreach ($thumbnails as $value) {
if (!in_array($value, array(".", ".."))) {
echo "<img src='" . $dir . $value . "'>";
}
}
答案 2 :(得分:1)
它们是目录和父目录,可以使用以下代码删除它们:
<?php
$dir = "downloads/";
if (is_dir($dir)){
if ($dir_handler = opendir($dir)){
while (($file = readdir($dir_handler)) !== false){
if ($file!="."&&$file!="..") {
//your code
}
}
closedir($dir_handler);
}
}
?>
答案 3 :(得分:1)
您也可以使用此
foreach ($thumbnails as $value) {
if ( $value !='.' && $value !='..')
{
echo "<img src='".$dir.$value. "'>";
}
}
答案 4 :(得分:1)
如果您要查找特定的文件类型,例如图片,最好使用glob
它允许您传递扩展模式
这样,您可以确保只获取要查找的文件。
多种文件类型的示例,.jpg
和.png
$dir = "bilder/".$objekt[0]['objekt_nr']."/thumbnail/";
$files = glob("*.{jpg,png}", GLOB_BRACE);
print_r($files);
GLOB_BRACE - 扩展{a,b,c}以匹配&#39;&#39;&#39; b&#39;或&#39; c&#39;
单个文件类型的示例.jpg
$dir = "bilder/".$objekt[0]['objekt_nr']."/thumbnail/";
$files = glob("*.jpg");
print_r($files);
答案 5 :(得分:0)
@joachim Pileborg答案是正确的,顺便说一下你也可以使用glob()
$thumbnails = glob("$dir/*.jpg");
foreach ($thumbnails as $value) {
echo "<img src='$value'/>";
}