所以我构建了一个基于$ _GET var扫描目录的函数,代码:
$dir="img/".$_GET["gal"];
$a=scandir($dir);
$b=array_slice($a,2);
for($i=1,$j=1;$i,$j<=count($b);$i++,$j++){
$marginRight=($i==6||$i==12||$i==18||$i==24||$i==30||$i==36)?"margin-right: 0":"margin-right: 13px";
if($i<10 && $j<10)
echo '<div class="GalThumbs" style="'.$marginRight.'"><a href="'.$dir.'/'.$_GET["gal"].'-0'.$j.'.jpg" rel="example3"><img src="'.$dir.'/'.$_GET["gal"].'-0'.$i.'.jpg"/></a></div>';
else{
echo '<div class="GalThumbs" style="'.$marginRight.'"><a href="'.$dir.'/'.$_GET["gal"].'-'.$j.'.jpg" rel="example3"><img src="'.$dir.'/'.$_GET["gal"].'-'.$i.'.jpg"/></a></div>';
}
/* if($i==11)
break; */
}
如果有超过十个图像要扫描,则会发生延迟(重绘浏览器会变慢) 我发现这是使用评论:
if($i==11)
break;
如果是:
if($i==10)
break;
没有延迟。不明白这里发生了什么......
答案 0 :(得分:1)
让我们来看看你的代码,我认为你在所有代码和它的作用中都会丢失。通过一些清理,您应该能够更轻松地调试延迟问题。
让我们从for循环开始:
for($i=1,$j=1;$i,$j<=count($b);$i++,$j++)
两个迭代器变量都是并行设置的。我确定你写的时候已经考虑过了什么,但这没有任何意义。如果您不确定如何继续,请尝试减少问题。
一个变量完成这项工作。同样在这里:
if($i<10 && $j<10)
然后我偶然发现了这个:
$marginRight=($i==6||$i==12||$i==18||$i==24||$i==30||$i==36)?"margin-right: 0":"margin-right: 13px";
您实际上在寻找modulo:获取余下的$i
除以6
。
if / else块都包含相同的代码。根本不需要使用它。
然后我假设你想要调试你想要以break来退出for循环。
接下来,您的代码可以从缩进中受益。
实际上只读取目录以获取文件数,因此可以减少代码以获取文件数。
让我们试试:
$gal = $_GET["gal"]; // FIXME sanitize the input
$dir = sprintf('img/%s', $gal);
$max = count(scandir($dir))-2;
for($i=1; $i<=$max; $i++)
{
$marginRight = ($i % 6 ? '13px' : '0');
$style = sprintf('margin-right: %s', $marginRight);
$src = sprintf('%s/%s-0%d.jpg', $dir, $gal, $i);
echo '<div class="GalThumbs" style="', htmlspecialchars($style), '">',
'<a href="', htmlspecialchars($src), '" rel="example3">',
'<img src="', htmlspecialchars($src),'"/>',
'</a>',
'</div>'
;
// FIXME debug
/* if($i==11) break; */
}