*/ final class FieldCollection extends \ArrayIterator { /** * @return array */ public function toChoices(): array { $choices = []; /** @var FieldCrate $field */ foreach ($this as $field) { $choices[$field->getName()] = $field->getKey(); } return $choices; } /** * @return FieldCrate|null */ public function getFieldByKey(string $key, bool $throwExceptionIfNotFound = true) { /** @var FieldCrate $field */ foreach ($this as $field) { if ($key === $field->getKey()) { return $field; } } if ($throwExceptionIfNotFound) { throw new FieldNotFoundException("Field with key {$key} was not found."); } return null; } /** * @param string[] $keys */ public function removeFieldsWithKeys(array $keys, string $keyToKeep = null): FieldCollection { return new self( array_filter( $this->getArrayCopy(), fn (FieldCrate $field): bool => ($keyToKeep && $field->getKey() === $keyToKeep) || !in_array($field->getKey(), $keys, true) ) ); } }