EDI\Reader::splitMultiMessage PHP Method

splitMultiMessage() public static method

Split multi messages to separate messages
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;
    }

Usage Example

Example #1
0
 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);
 }