这是我的数组:
$array = array(1,2,3,4,5,6,7,8,9,10);
我想在数组中迭代5次,做其他事情,然后在我离开的地方继续迭代。
foreach ($array as $value) {
//do something until key 5
}
//do something else now
//resume...
foreach ($array as $value) {
//key should start at 6
}
我该怎么做?有没有办法通过foreach循环来实现这一目标?
更新:我意识到重复两次相同的代码会很愚蠢。我问这个的原因是因为我使用foreach
循环来显示表行。我想显示前五个并隐藏其余部分。所以这就是我最终的结果:
<?php
$counter = 1;
foreach ($array as $object): ?>
<?php if ($counter > 5): ?>
<tr style="display: none;">
<?php else: ?>
<tr>
<?php endif; ?>
<td><?php echo $object->name; ?></td>
</tr>
<?php $counter++; ?>
<?php endforeach; ?>
答案 0 :(得分:3)
您需要使用PHP的内部数组指针。
类似的东西:
$arr = range(0, 9);
for($i = 0; $i < 5; $i++) {
print current($arr);
next($arr);
}
//the pointer should be half way though the array here
答案 1 :(得分:1)
只是好奇,但是不会在数组中调用一个函数来做你需要做的事情来实现相同的结果吗?
答案 2 :(得分:1)
类似的东西:
$counter = 0;
foreach ($array as $value)
{
if($counter == 5)
{
do something random;
$counter++;
continue;
}
//do something until key 5
$counter++;
}
答案 3 :(得分:1)
使用两个数组:
$first_five = array_slice($array, 0, 5);
$remainder = array_slice($array, 5);
答案 4 :(得分:0)
是否有理由需要使用foreach
执行此操作,而不仅仅是for
?
答案 5 :(得分:0)
你可以使用each()来重复迭代。
$a = array(1,2,3,4);
foreach ($a as $v) {
if ($v == 2) break;
}
while (list($k, $v) = each($a)) {
echo "$k = $v\n";
}
答案 6 :(得分:0)
我认为jspcal到目前为止得到了最好的答案。我对他的代码做的唯一修改就是使用do-while循环,所以它不会跳过第一个循环中断的元素。
$arr = array(1,2,3,4);
// Prints 1 2
foreach($arr as $v)
{
if ($v == 3)
{
break;
}
echo "$v ";
}
// Prints 3 4
do
{
echo "$v ";
}
while( list($k, $v) = each($arr) );
答案 7 :(得分:0)
(对于上述问题我不建议但是:)你也可以使用NoRewindIterator。
$array = array(1,2,3,4,5,6,7,8,9,10);
$it = new NoRewindIterator(new ArrayIterator($array));
foreach($it as $x) {
echo $x;
if ($x > 4) {
break;
}
}
// $it->next();
echo 'taadaa';
foreach($it as $x) {
echo $x;
}
打印12345taadaa5678910
。
(注意元素5
的重复。取消注释$ it-&gt; next()行以避免这种情况。
答案 8 :(得分:-2)
这有点kloodgy,但它应该工作:
foreach($array as $key => $value)
{
$lastkey = $key;
// do things
if($key == 5) break;
}
// do other things
foreach($array as $key => $value)
{
if($key <= $lastkey) continue;
// do yet more things
}