簡體   English   中英

Foreach循環的奇怪行為

[英]Strange Behaviour With Foreach Loop

我在以下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
        )
)

第二個print_r打印:

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

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

$ this-> form_spec ['fields']在到達每個循環之前已經具有它的值。 第一個print_r顯示正確的值。 然后,第二個print_r顯示值已更改。 這些之間沒有其他代碼。

可能是5.3.0中的錯誤?

解決這個問題的唯一方法是改用for循環,但是Foreach應該應該一直在做。 有人可以啟發我嗎?

[編輯]只是為了澄清,錯誤是$ this-> form_spec ['fields']的內容改變了我不能正確打印的事實。

您正在打印$this->form_spec['fields']而不是迭代$field的結果。

編輯

現在我明白了你的意思了。 看來您在循環中某個地方迭代對象時正在更改對象的內容。 您能否發布相關代碼?

我99%的肯定是在迭代更改您所擁有的內容的同時還要觸摸更多代碼。

您應該這樣做:

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次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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