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()); } } } /** * * @param FormInterface[] $forms * @param Collection $viewData */ public function mapFormsToData($forms, &$viewData) { $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); } } } } } }