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