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.
答案 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 />";
}
?>