3

私はこのようなPHPコードを書いています:

foreach($filter[1] as $reject){
        $reject_processed = preg_replace('~\s~','',strtolower($filter[1][$reject]));
        if(array_key_exists($reject_processed,$list_of_common_replacements)){
            $filter[0][] = $list_of_common_replacements[$reject_processed];
            $filter[1] = array_splice($filter[1],$reject,1)
        }

    }

拒否された値のリスト(filter [1])を検索し、置換が存在するかどうかを確認し、(存在する場合)適切な値のリスト(filter [0])に置換を追加し、固定値を削除します。リストを拒否します。

foreach()内のforeach()のメインサブジェクトである配列から値を削除すると、これに問題が発生しますか?

4

2 に答える 2

6

いいえforeach、配列のコピーを作成します。次のコードを検討してください。

$arr = array(1,2,3,4,5);
foreach($arr as $k=>$v) {
    if($v==1) {
        unset($arr);
    }
    echo $v;
}

最初の反復で元の配列全体を設定解除しても、これはまだ出力されます12345

于 2012-07-20T22:56:13.827 に答える
1

質問に簡潔に答えるには:いいえ。

これはforeach、アレイのコピーで動作し、コピーオンライト動作を行うためです。サブジェクトアレイを変更するとすぐにコピーが作成されるため、ループには影響しません。array_splice()配列の内部ポインタの現在位置に依存しないため、安全に使用できます。current()一方、そうではありません。

私はこのトピックを深く調べ、非常に混乱し、SOについて質問しました。これは、すべてがどのように機能するかについての完全な説明とともに、私の混乱に非常によく答えました。これはここにあります。

于 2012-07-20T22:53:17.977 に答える