/** * @param Records $records * * @return Collection */ private function convertRecord(Records $records) { $records = array_map(function (MarcRecord $item) { $record = new Record($item->getLeader()); $fields = $item->getFields(); foreach ($fields as $field) { if ($field instanceof \File_MARC_Control_Field) { $record->setControlField($this->convertControlField($field)); } elseif ($field instanceof \File_MARC_Data_Field) { $record->addDataField($this->convertDataField($field)); } else { throw new \InvalidArgumentException('Unknown Field Type'); } } return $record; }, iterator_to_array($records)); $collection = new Collection($records); return $collection; }
private function convertRecord(Record $record) { $records = $record->toArray(); $offset = 0; $fields = array_merge($records['subfield'], $records['datafield']); $content = []; $directory = []; foreach ($fields as $field) { $result = $field instanceof ControlField ? $this->convertControlField($field) : $this->convertDataField($field); $content[] = $result; $length = strlen($result); $entry = sprintf("%03s%04d%05d", $field->getTag(), $length, $offset); $directory[] = $entry; $offset += $length; } $base = File_MARC::LEADER_LEN + count($directory) * File_MARC::DIRECTORY_ENTRY_LEN + 1; $total = $base + $offset + 1; $record->setLeaderLength($total, $base); return $record->getLeader() . implode($directory) . File_MARC::END_OF_FIELD . implode($content) . File_MARC::END_OF_RECORD; }