我如何循环一个数组,从偏移开始并再次循环?

时间:2014-02-10 09:28:56

标签: php arrays loops

Newb问题:我正在使用foreach循环从数组中获取项目。

我需要以偏移数开始循环 - (我使用$ i变量来做这个,没问题)。

但是当我的foreach到达数组的末尾时,我希望它再次开始遍历数组,直到达到偏移数。

我需要这样做,这样我就可以让用户打开艺术家作品集中的任何图像,并将此图像用作缩略图图标网格中显示的第一个图像,其他所有图像随后填充网格的其余部分

有什么想法吗? 请记住我是PHP的新手! :) 请参阅下面的我当前代码示例...

       $i=0;
        $limit=50;// install this in the if conditional with the offset in it (below) to limit the number of thumbnails added to the page.
        $offset=$any_arbitrary_link_dependant_integer;

        foreach($portfolio_image_array as $k=>$image_obj){//$k = an integer counter, $image_obj = one of the many stored imageObject arrays.
            $i++;
            if ($i > $offset && $i < $limit) {// ignore all portfolio_array items below the offset number.
                if ($img_obj->boolean_test_thing===true) {// OK as a way to test equivalency?
                    // do something
                } else if ($img_obj->boolean_test_thing===false) { // Now add all the non-see_more small thumbnails:
                    // do something else
                } else {
                    // error handler will go here.
                }
            } // end of offset conditional

        }// end of add boolean_test_thing thumbnails foreach loop.
    };// end of add thumbnails loop.

4 个答案:

答案 0 :(得分:0)

一个简单的方法是使用两个单独的数字for循环,第一个从offset到end,第二个从开始到offset。

<?php
// Create an example array - ignore this line
$example = array(1,2,3,4,5,6);

$offset = 3;

// Standard loop stuff
$count = count($example);
for($i = $offset; $i < $count; $i++)
{
    echo $example[$i]."<br />";
}

for($i = 0; $i < $offset; $i++)
{
    echo $example[$i]."<br />";
}

?>

这几乎肯定比对阵列中的每个元素进行多次检查更便宜,并且它正好表达了您正在尝试对其他看过此代码的程序员做的事情 - 包括您在2周内的时间。

编辑:根据数组的性质,为了使用数字键,您可能首先需要$example = array_values($portfolio_image_array);

答案 1 :(得分:0)

$i = 0;
$limit = 50;
$offset = $any_arbitrary_link_dependant_integer;
$count = count($portfolio_image_array);
        foreach($portfolio_image_array as $k=>$image_obj){//$k = an integer counter, $image_obj = one of the many stored imageObject arrays.
        $i++;
        if ($i > $offset && $i < $limit && $i < ($count - $offset)) {// ignore all portfolio_array items below the offset number.
            if ($img_obj->boolean_test_thing===true) {// OK as a way to test equivalency?
                // do something
            } else if ($img_obj->boolean_test_thing===false) { // Now add all the non-see_more small thumbnails:
                // do something else
            } else {
                // error handler will go here.
            }
        } // end of offset conditional

    }// end of add boolean_test_thing thumbnails foreach loop.
};

我添加的只是$ count变量。

编辑:如果您的数组从0开始,我建议您将$i++;放在foreach循环的末尾。

答案 2 :(得分:0)

使用Answer Question强制StackOverflow让我发布一段不错的文字! 好的@Mark Walet等人,不知道如何在这个论坛上正确发布,但现在就去了。我把问题分类如下:

$i=0;
$offset=$image_to_display_number;
    $array_length = count($portfolio_image_array);

    // FIRST HALF LOOP:
    foreach($portfolio_image_array as $k=>$img_obj){// go through array from offset (chosen image) to end.
    if ($i >= $offset && $i <= $array_length) {
            echo write_thumbnails_fun($type_of_thumbnail, $image_path, $k, $i, $portfolio_image_array, $title, $image_original);
            $t_total++;// update thumbnail total count.
        }
        $i++;
    }// end of foreach loop 1.
    $looped=true;// Just FYI.
    $i=0;// Reset.
    // SECOND HALF LOOP:
    foreach($portfolio_image_array as $k=>$img_obj){// go through array from beginning to offset.
        if ($i < $offset) {
            echo write_thumbnails_fun($type_of_thumbnail, $image_path, $k, $i, $portfolio_image_array, $title, $image_original);
        }
        $i++;
    }// end of foreach loop 2.

非常感谢你的帮助! :)

答案 3 :(得分:0)

@arkascha建议使用模运算符

<?php

$example = array(1,2,3,4,5,6);
$count = count($example);
$offset = 3;

for($i = 0; $i < $count; $i++) {
  $idx = ($offset + $i) % count 
  echo $example[$idx]."<br />";
}
?>