массивы — PHP: приведение типов и изменение элемента в цикле foreach

Я столкнулся со странной ситуацией сегодня. Мне нужно изменить элемент массива в цикле foreach. Как мы знаем, это можно сделать, используя ссылку.

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

Но вышеприведенный код не работает и «subjectSchemeVersion» не установлен. В то же время, если я удаляю (массив) это работает:

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

Можете ли вы объяснить это поведение мне?

1

Решение

Кастинг $output переменная в массив, вы делаете копию этого. & все еще работает, но это относится к копии. После цикла копия забывается / сборка мусора, а оригинал $output никогда не менялся.

Вместо этого вы можете сделать следующее: $output в массив до цикла:

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

Другие решения

Других решений пока нет …