2014-09-18 65 views
1

今天我遇到了一個奇怪的情況。我需要在foreach循環中更改數組元素。我們知道它可以通過使用參考來完成。PHP:類型轉換和foreach循環中元素的更改

foreach((array)$output['subjectComposite'] as &$subjectComposite){ 
    $subjectComposite['subjectSchemeVersion'] = $cellValue; 
} 

但上面的代碼不起作用,'subjectSchemeVersion'未設置。在同一時間,如果我刪除(陣列)它的工作原理:

foreach($output['subjectComposite'] as &$subjectComposite){ 
    $subjectComposite['subjectSchemeVersion'] = $cellValue; 
} 

你能解釋這種行爲嗎?

回答

3

通過將$output變量轉換爲數組,您複製該數組。 &仍然有效,但它指的是副本。循環後,副本被遺忘/垃圾收集,並且原始$output從未被更改過。

您可以執行以下操作來代替,這將$output之前轉換成數組的循環:

settype($output, 'array'); 
foreach($output['subjectComposite'] as &$subjectComposite){ 
    $subjectComposite['subjectSchemeVersion'] = $cellValue; 
} 
+0

感謝解釋 – Tamara 2014-09-18 17:21:01

+0

信貸的例子去'尼克J',他提出建議編輯: - ) – jornane 2014-09-18 17:21:51