我有一个图片库,每个图片库都按索引保存。gallery1:/ image here .. gallery2:/ image here ..依此类推。 我正在使用具有多个for循环的索引来返回图像和按列,因为它是砖石结构或矩形。除了最后一个索引,我得到的回报很好。
private function rectangle($items, $columns, $contents = array()) {
$thumbs = array('talent_thumbnail','360x207');
$arr = array();
$col = round(count($items) / $columns);
$perCol = floor(count($items) / $columns);
$extra = count($items) % $columns;
$ind = 1;
$length = count($items);
$arr = array();
for($i = 0; $i < $columns && $ind < $length; $i++) {
$temp = array();
for($j = 0; $j < $perCol; $j++) {
$obj = new JObject();
$obj->image = $items['gallery' . $ind]['photo'];
$obj->alt_text = $items['gallery'. $ind]['alt_text'];
$temp[] = $obj;
$ind++;
}
if ($extra > 0) {
$obj = new JObject();
$obj->image = $items['gallery'. $ind]['photo'];
$obj->alt_text = $items['gallery'. $ind]['alt_text'];
$temp[] = $obj;
$ind++;
$extra--;
}
$arr[] = $temp;
}
}
我知道这并不难,但我现在还不那么擅长。 任何帮助都非常欢迎。 谢谢。
答案 0 :(得分:0)
将变量$ind
设置为1,计算数组的长度,然后使用条件$ind < $length
初始化for循环。
当$ind
到达访问最后一项所需的索引时,该循环不会再次运行,因为$ind
现在等于$length
,而不是较小。
您可以通过将for循环中的条件更改为“小于或等于”来解决此问题:
$i < $columns && $ind <= $length
当$ind
到达最后一个索引时,它将再次运行循环。
答案 1 :(得分:-1)
问题可能出在这一行:
$ind = 1;
在PHP中,非关联数组的索引以0
开头,而不是1
:
$arr = array('a', 'b', 'c');
print_r($arr);
// output:
Array ( [0] => a [1] => b [2] => c )
因此,尝试将代码中的该行更改为:
$ind = 0;
完整代码:
private function rectangle($items, $columns, $contents = array()) {
$thumbs = array('talent_thumbnail','360x207');
$arr = array();
$col = round(count($items) / $columns);
$perCol = floor(count($items) / $columns);
$extra = count($items) % $columns;
$ind = 0;
$length = count($items);
$arr = array();
for($i = 0; $i < $columns && $ind < $length; $i++) {
$temp = array();
for($j = 0; $j < $perCol; $j++) {
$obj = new JObject();
$obj->image = $items['gallery' . $ind]['photo'];
$obj->alt_text = $items['gallery'. $ind]['alt_text'];
$temp[] = $obj;
$ind++;
}
if ($extra > 0) {
$obj = new JObject();
$obj->image = $items['gallery'. $ind]['photo'];
$obj->alt_text = $items['gallery'. $ind]['alt_text'];
$temp[] = $obj;
$ind++;
$extra--;
}
$arr[] = $temp;
}
}