for循环中的索引未返回最后一个索引

时间:2019-09-20 01:21:46

标签: php

我有一个图片库,每个图片库都按索引保存。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;
    }
}

我知道这并不难,但我现在还不那么擅长。 任何帮助都非常欢迎。 谢谢。

2 个答案:

答案 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;
    }
}