[英]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.