private function serializeCitationDescription(MetadataDescription &$citationDescription) { // Prepare transformation tables for the output serialization: // - the following lines will be deleted from our output file static $linesToDelete = array(' [0-9]+ => ', ' array \\(', ' \'_data\' => ', ' \\),'); // Transform person descriptions to arrays $citationDescriptionArray = $citationDescription->getStatements(); $personDescriptionProperties = array('person-group[@person-group-type="author"]', 'person-group[@person-group-type="editor"]'); foreach ($personDescriptionProperties as $personDescriptionProperty) { if (isset($citationDescriptionArray[$personDescriptionProperty])) { foreach ($citationDescriptionArray[$personDescriptionProperty] as &$person) { $person = $person->getStatements(); } } } // Transform the result into an array that we can serialize // in a human-readable form and also re-import as PHP-parsable code. $citationDescriptionOutput = var_export($citationDescriptionArray, true); $citationDescriptionOutputArray = explode("\n", $citationDescriptionOutput); foreach ($citationDescriptionOutputArray as $key => &$citationDescriptionOutputLine) { // Remove redundant lines foreach ($linesToDelete as $lineToDelete) { if (preg_match('/^' . $lineToDelete . '$/', $citationDescriptionOutputLine)) { unset($citationDescriptionOutputArray[$key]); } } // Correctly indent the output line $citationDescriptionOutputLine = "\t\t\t" . preg_replace('/^\\t\\t\\t/', "\t\t", str_replace(' ', "\t", $citationDescriptionOutputLine)); } // Create the final serialized format return implode("\n", $citationDescriptionOutputArray); }