Я столкнулся со странной ситуацией сегодня. Мне нужно изменить элемент массива в цикле foreach. Как мы знаем, это можно сделать, используя ссылку.
foreach((array)$output['subjectComposite'] as &$subjectComposite){
$subjectComposite['subjectSchemeVersion'] = $cellValue;
}
Но вышеприведенный код не работает и «subjectSchemeVersion» не установлен. В то же время, если я удаляю (массив) это работает:
foreach($output['subjectComposite'] as &$subjectComposite){
$subjectComposite['subjectSchemeVersion'] = $cellValue;
}
Можете ли вы объяснить это поведение мне?
Кастинг $output
переменная в массив, вы делаете копию этого. &
все еще работает, но это относится к копии. После цикла копия забывается / сборка мусора, а оригинал $output
никогда не менялся.
Вместо этого вы можете сделать следующее: $output
в массив до цикла:
settype($output, 'array');
foreach($output['subjectComposite'] as &$subjectComposite){
$subjectComposite['subjectSchemeVersion'] = $cellValue;
}
Других решений пока нет …