1

foreach ループで特定の条件が満たされたときに、現在のインデックスを再度実行することは可能ですか? 以下に例を投稿します。

$array = array('this', 'is', 'my', 'array');
$bool = false;
foreach($array as $value){
    echo $value.' ';
    if($value == 'my' && !$bool){
        // Rerun the 'my' index again
        $bool = true;
    }
}

望ましい出力:これは私の配列です

4

2 に答える 2

4

(または他のハックを介して) 可能かもしれませんが、この方法で記述されたコードは (数年後の自分でも) 理解するのが困難です。prevプログラマーにとって、foreach構造は (一見すると) 前後にジャンプすることなく、配列のすべての要素を単純に反復するように見えます。

また、ループprev内はある PHP バージョンでは機能するが、別のバージョンでは失敗する可能性があることに注意してください。 PHPドキュメントは言うforeach

foreach は内部配列ポインターに依存しているため、ループ内で変更すると、予期しない動作が発生する可能性があります。

whileあなたの場合はループを使用することをお勧めします(インデックスまたは--each関数のいずれかを使用)。この構造は、反復ロジックが配列要素に対する単なる順次反復よりも複雑であることをプログラマーに即座に知らせます。prevnextwhile

$array = array('this', 'is', 'my', 'array');
$bool = false;

while (list($key, $value) = each($array))  
{
  echo $value.' ';
  if($value == 'my' && !$bool)
  {
    // Rerun the 'my' index again
    $bool = true;
    prev($array);
  }
}
于 2013-06-24T08:46:39.727 に答える
2

別のバリアント:

<?php
$array = array('this', 'is', 'my', 'array');
$bool = false;

foreach ($array as $value) {
    do {
        echo $value.' ';

        if($value == 'my' && !$bool){
            // Rerun the 'my' index again
            $bool = true;
        } else {
            $bool = false;
        }
    } while ($bool);
}

出力 (こちらも参照):

this is my my array
于 2013-06-24T08:44:24.117 に答える