public static splitMultiMessage ( $ediMessage ) : array | ||
$ediMessage | string | |
return | array |
public static function splitMultiMessage($ediMessage)
{
$splicedMessages = [];
$rawSegments = self::unwrap($ediMessage);
//var_dump($rawSegments);
$message = [];
$unb = false;
foreach ($rawSegments as $segment) {
if (substr($segment, 0, 3) == 'UNB') {
$unb = $segment;
continue;
}
if (substr($segment, 0, 3) == 'UNH') {
if ($unb) {
$message[] = $unb;
}
$message[] = $segment;
continue;
}
if (substr($segment, 0, 3) == 'UNT') {
$message[] = $segment;
$splicedMessages[] = $message;
$message = [];
continue;
}
if ($message) {
$message[] = $segment;
continue;
}
}
if (substr($segment, 0, 3) == 'UNZ') {
$segment = preg_replace('#UNZ\\+\\d+\\+#', 'UNZ+1+', $segment);
foreach ($splicedMessages as $k => $message) {
$splicedMessages[$k][] = $segment;
}
}
foreach ($splicedMessages as $k => $message) {
$splicedMessages[$k] = implode(PHP_EOL, $splicedMessages[$k]);
}
return $splicedMessages;
}
public function testSplitMultiMessage() { $multiEdi = file_get_contents(__DIR__ . "/../files/exampleMulti.edi"); $eddies = Reader::splitMultiMessage($multiEdi); $this->assertEquals(2, count($eddies)); $r = new Reader($eddies[0]); $messageType = $r->readUNHmessageType(); $this->assertEquals('PAORES', $messageType); $r = new Reader($eddies[1]); $messageType = $r->readUNHmessageType(); $this->assertEquals('PAORES', $messageType); }