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
        )
)

第二个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 显示正确的值。然后第二个 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 回答