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; }