![](/img/trans.png)
[英]PHP: How do you output just one line in an array and have it remember where it left off?
[英]PHP: how to iterate through an array, and resume where you left off?
這是我的數組:
$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; ?>
您需要使用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
只是好奇,但是不會調用數組中的函數來完成您需要完成的事情嗎?
像這樣的東西:
$counter = 0;
foreach ($array as $value)
{
if($counter == 5)
{
do something random;
$counter++;
continue;
}
//do something until key 5
$counter++;
}
使用兩個數組:
$first_five = array_slice($array, 0, 5);
$remainder = array_slice($array, 5);
是否有你需要做的一個原因foreach
,而不是僅僅for
?
您可以使用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";
}
我認為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) );
(對於所述問題,我不推薦使用,但:)您也可以使用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-> next()行可避免這種情況)。
這有點笨拙,但應該可以:
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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.