1

配列を連続的にループする方法を見つけようとしてforeachいますが、配列のコピーまたはそれらの行に沿った何かで機能するため、明らかに使用は機能しません。

私は試した:

$amount = count($stuff);
$last_key = $amount - 1;

foreach ($stuff as $key => $val) {

    // Do stuff

    if ($key == $last_key) {
        // Reset array cursor so we can loop through it again...
        reset($stuff);
    }

}

しかし、明らかにそれはうまくいきませんでした。ここでの私の選択は何ですか?

4

6 に答える 6

4

簡単な方法は、ArrayIteratorInfiniteIteratorを組み合わせることです。

$infinite = new InfiniteIterator(new ArrayIterator($array));
foreach ($infinite as $key => $val) {
    // ...
}
于 2013-10-18T16:58:06.087 に答える
4

これはwhileループで実現できます。

while (list($key, $value) = each($stuff)) {
    // code
    if ($key == $last_key) {
        reset($stuff); 
    }
}
于 2013-10-18T16:58:14.333 に答える
3

このループは止まらない:

while(true) {
    // do something
}

必要に応じて、次のようにループを中断できます。

while(true) {
    // do something
    if($arbitraryBreakCondition === true) {
        break;
    }
}
于 2013-10-18T16:56:43.477 に答える
1

ループを使用して、for常に true になる条件を設定できます。たとえば、次のようになります。

$amount = count($stuff);
$last_key = $amount - 1;

for($key=0;1;$key++)
{
    // Do stuff
    echo $stuff[$key];

    if ($key == $last_key) {
        // Reset array cursor so we can loop through it again...
        $key= -1;
    }


}

明らかに、他の人が指摘しているように、それを実行する前に、ループを停止する何かがあることを確認してください!

于 2013-10-18T16:57:55.547 に答える
0

関数を使用して、while ループで false を返す:

function stuff($stuff){
   $amount = count($stuff);
   $last_key = $amount - 1;

   foreach ($stuff as $key => $val) {

       // Do stuff

       if ($key == $last_key) {
           // Reset array cursor so we can loop through it again...
           return false;
       }

   }
}

while(stuff($stuff)===FALSE){
    //say hello
}
于 2013-10-18T17:01:39.517 に答える