0

次の foreach ループで奇妙な動作が発生しています。PHP 5.3.0で実行しています。

print_r($this->form_spec['fields']);
foreach($this->form_spec['fields'] as $f=>$field) {
     print_r($this->form_spec['fields']);                      
}

最初の print_r は次を出力します (注: 要点を明確にするために、一連のキーを除外しました)。

Array
(      
    [0] => Array
    (
       [field_name] => d_first_name
    )

    [1] => Array
        (
            [field_name] => d_last_name
        )
)

2番目のprint_r出力:

Array
(
    [0] => Array
        (
            [field_name] => d_first_name
        )

    [1] => Array
        (
            [field_name] => d_first_name
        )
)

$this->form_spec['fields'] には、for each ループに到達する前に既に値があります。最初の print_r は正しい値を示しています。次に、2 番目の print_r は、値が変更されたことを示しています。これらの間に他のコードはありません。

5.3.0 のバグでしょうか?

問題を回避できる唯一の方法は、代わりに for ループを使用することでしたが、Foreach は機能する必要があり、以前は常に機能していました。誰でも私を啓発できますか?

[編集] 明確にするために、バグは $this->form_spec['fields'] の内容が変更され、正しく印刷できないという事実ではありません。

4

2 に答える 2

2

$this->form_spec['fields']繰り返しの結果の代わりに印刷しています$field

編集

今、私はあなたが何を意味するかを見ることができます. ループのどこかでオブジェクトを繰り返し処理しながら、オブジェクトの内容を変更しているようです。関連するコードを投稿していただけますか?

あなたが持っているものを変更する反復中に触れられるコードがもっとあると99%確信しています。

于 2012-07-02T15:06:31.810 に答える
1

あなたはこれをするべきです:-

print_r($this->form_spec['fields']);
foreach($this->form_spec['fields'] as $f=>$field) {
     print_r($field);                      
}

私はあなたのコードでこのテストを実行しました:-

for($i = 0; $i < 10; $i++){
    $form_spec['fields'][] = array('field_name' => 'field_' . $i);
}
print_r($form_spec['fields']);
foreach($form_spec['fields'] as $f => $field) {
    print_r($form_spec['fields']);
}

(PHP_VERSION = 5.3.0)

期待した出力が得られたので、その配列をどこかで変更している必要があります。コードを注意深くチェックする必要があります。

出力:-

Array
(
    [0] => Array
        (
            [field_name] => field_0
        )

    [1] => Array
        (
            [field_name] => field_1
        )

    [2] => Array
        (
            [field_name] => field_2
        )

    [3] => Array
        (
            [field_name] => field_3
        )

    [4] => Array
        (
            [field_name] => field_4
        )

    [5] => Array
        (
            [field_name] => field_5
        )

    [6] => Array
        (
            [field_name] => field_6
        )

    [7] => Array
        (
            [field_name] => field_7
        )

    [8] => Array
        (
            [field_name] => field_8
        )

    [9] => Array
        (
            [field_name] => field_9
        )

)

10回繰り返した。

于 2012-07-02T15:10:11.193 に答える