簡體   English   中英

PHP:如何遍歷數組,然后從上次中斷的地方繼續?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM