编辑:
考虑到您的相关问题,您可能需要考虑使用glob
更具体的模式扫描您的目录,类似于以下内容:
$sLike = glob('{0,1,2,3,4,5,6,7,8,9}.jpg',GLOB_BRACE);
//selects all .jpg files with names ending with number.jpg, so no _thumb.jpg files
然后,考虑到这一点并根据您的评论。如何删除文件扩展名:
$sLike = array();//the array from dir scan
$clean = array();
foreach($sLike as $file)
{
$clean[] = substr($file, 0, strpos($file, '.')*-1);//get file name
}
$format = '<a href="%s.jpg"><img src="%1$s_thumb.jpg" /></a>';//output format
foreach($clean as $like)
{
printf($format, $like);
}
或者,使用更自由的glob
调用模式,并且如果您想使用选项 2(每个文件具有不同扩展名的选项):
$sLike = array();//the array from dir scan
$clean = array();
foreach($sLike as $file)
{
$endOffset = strpos($file, '.')*-1;
$clean[] = array(
substr($file, 0, $endOffset),//get file name
substr($file,$endOffset)//get extension, includes the . char!
);
}
$format = '<a href="%s%s"><img src="%1$s_thumb%2$s" /></a>';//output format
foreach($clean as $like)
{
echo vsprintf($format, $like);
}
就是这样...
我要做的只是使用一个数组。两个图像的基本字符串相同:
$slike=array(
'artist2-1',
'artist2-2',
'artist2-3',
'artist2-4'
);//remove extensions
$format = '<a href="%s.jpg"><img src="%1$s_thumb.jpg" /></a>';//output format
foreach($slike as $like)
{
printf($format, $like);
}
这会给你你想要的,而不需要 2 个数组,正如你在这个 codepad上看到的那样。
这种方法的好处:
- 只构造 1 个数组,而不是 2 个
- 使用
printf
which 在内部转换为fprintf(stdout, "<your format>", zval*$like);
C 中的 a,速度很快。
- 没有多余的脂肪:几乎没有重复。您甚至可以将格式更改为
artist2-%s.jpg"><img src="artist2-%s_thumb.jpg" />
,并且只将数字存储在数组中,但这已经很荒谬了。
- 简明扼要的代码
当然,也有一些注意事项:
- 可读性和可维护性较差的代码
- 如果您添加了 1 张具有不同扩展名 (png) 的图像,则必须重构...
这是你的选择。如果可能发生不同的扩展,您可以将上面的代码更改为:
$slike=array(
array('artist2-1','jpg'),
array('artist2-2','png'),
array('artist2-3','gif'),
array('artist2-4','jpeg'),
);//remove extensions
$format = '<a href="%s.%s"><img src="%1$s_thumb.%2$s" /></a>';//output format
foreach($slike as $like)
{
echo vsprintf($format, $like);
}
正如你在这个键盘上看到的那样,它也可以像一个魅力一样工作