diff --git a/src/HL7/Message.php b/src/HL7/Message.php index 11cc51b..da6c07a 100644 --- a/src/HL7/Message.php +++ b/src/HL7/Message.php @@ -343,6 +343,15 @@ public function reindexSegments(): void } } + /** + * After removing segments from the middle of the message, $msg->getSemgnets() returns an array with gaps in the + * keys. This method can be used to re-key the segments array + */ + public function rekeySegmentsInArray(): void + { + $this->segments = array_values($this->segments); + } + /** * Return a string representation of this message. * diff --git a/tests/MessageTest.php b/tests/MessageTest.php index dc601ec..a1d19c0 100644 --- a/tests/MessageTest.php +++ b/tests/MessageTest.php @@ -14,6 +14,7 @@ use Exception; use InvalidArgumentException; use DMS\PHPUnitExtensions\ArraySubset\Assert; +use PHPUnit\Framework\Attributes\Test; class MessageTest extends TestCase { @@ -679,4 +680,16 @@ public function reindex_message_segments(): void self::assertSame(2, $OBXs[1]->getId()); self::assertSame("CWE", $OBXs[1]->getValueType()); } + + #[Test] public function it_can_reset_segment_array_keys_after_segments_are_removed(): void + { + $msgObj = new Message("MSH|^~\&|||||||ORU^01||P|2.3.1|\nABC|1|||\nABC|2|||\nABC|3|||"); + $segments = $msgObj->getSegmentsByName('ABC'); + $msgObj->removeSegment($segments[1]); + self::assertSame([0, 1, 3], array_keys($msgObj->getSegments())); + + $msgObj->rekeySegmentsInArray(); + + self::assertSame([0, 1, 2], array_keys($msgObj->getSegments())); + } }