getIterator() as $key => $altName) { /* @var PersonAltName $altName */ $mapIndexToKey[$altName->getKey()] = $key; } foreach ($forms as $key => $form) { if (\array_key_exists($key, $mapIndexToKey)) { $form->setData($viewData->get($mapIndexToKey[$key])->getLabel()); } } } public function mapFormsToData(\Traversable $forms, &$viewData): void { $mapIndexToKey = []; if (\is_array($viewData)) { $dataIterator = $viewData; } else { $dataIterator = $viewData instanceof ArrayCollection ? $viewData->toArray() : $viewData->getIterator(); } foreach ($dataIterator as $key => $altName) { /* @var PersonAltName $altName */ $mapIndexToKey[$altName->getKey()] = $key; } foreach ($forms as $key => $form) { $isEmpty = empty($form->getData()); if (\array_key_exists($key, $mapIndexToKey)) { if ($isEmpty) { $viewData->remove($mapIndexToKey[$key]); } else { $viewData->get($mapIndexToKey[$key])->setLabel($form->getData()); } } else { if (!$isEmpty) { $altName = (new PersonAltName()) ->setKey($key) ->setLabel($form->getData()); if (\is_array($viewData)) { $viewData[] = $altName; } else { $viewData->add($altName); } } } } } }