我有一个php程序,它扫描一个目录,其中的内容是pdf文件的缩略图。然后缩略图显示在表格中,并包含在父网页的iframe中。每个缩略图本身都是一个超链接,当点击它将打开实际的pdf文件。为了避免使用水平滚动条,表格行中的9个图像是完美的。我写了一个嵌套循环,实际上就像一个自动换行,它显示9个图像,然后开始另一行。实际的代码更加紧凑,所以我把它简化为一个最基本的例子。乍一看似乎几乎是反直觉的,在外环的第二行减少了$ i,但它确实有效。我想知道是否有人有更优雅的解决方案?
$ary = array(1,2,3,4,5,6,7,8,9,10);
for ($i=1; $i<(count($ary)+1); $i++) {
$i = $i-1;
for($j=0; $j<9; $j++) {
if ($i === count($ary)) break;
echo ($ary[$i].", ");
$i+=1;
}
echo "<br>";
}
现在已完成的代码,其中$ ndx是数组的计数,$ dir是包含png图像的扫描目录,$ rtDir是保存pdf的目录:
if ($ndx > 0) {
$tbl = '<div id="draggable" class="ui-widget-content">
<ul>
<table><tr>';
/* place 9 images on one row */
foreach ($myfiles as $index => $image) {
$pdf = basename($image, ".png");
$pdf = $pdf . ".pdf";
$pdf = $rtDir.$pdf;
$tbl .= '<td>
<span class="zoom">
<a href="'.$pdf.'" target="_blank">
<li><img id="pdfthumb'.$index.'" class="myPhotos" alt="pdf'.$index.'" src="'.$dir.$image.'" ></li>
</a>
</span>
</td>';
if ($index % 9 == 8) {
/* end the current row and start a new one */
$tbl.= "</tr></table><br><br><table style='margin-top:-40px'><tr>";
}
}
$tbl .= "</tr></table></ul></div>";
printf($tbl);
unset($myfiles);
}
感谢大家的建议。
答案 0 :(得分:5)
所以你想要每行9张图片?通常有两种合理的选择:
备选方案1:您使用array_chunk()
,例如像这样:
$chunks = array_chunk($images, 9);
foreach ($chunks as $chunk) {
foreach ($chunk as $image) {
// image printing goes here
}
echo '<br'>;
}
备选方案2:您使用模运算符,例如像这样:
foreach ($images as $index => $image) {
// images printing goes here
if ($index % 9 == 0) { // or 8, since it's a 0-index array... I don't remember
echo '<br>';
}
}
我主要使用第二个版本,我自己,如果必须的话 - 或者我要求我们的设计师通过css使其适合宽度。请注意,如果图像数组是关联的,则第二个版本将无效。
答案 1 :(得分:1)
$b = count( $ary ) - 1 ;
for( $i = 0 ; $i <= $b ; $i++ ) :
echo $ary[$i] ;
if( ( $i + 1 ) % 9 == 0 ) :
echo "<br>" ;
endif ;
endfor ;
像上面的评论我喜欢模数,但我也更喜欢for循环,希望这会有所帮助。