From 3b05cc3b64a0f2b763c8e550bc6c03b71474cd1a Mon Sep 17 00:00:00 2001 From: Greg Bowler Date: Thu, 13 Jul 2023 10:45:07 +0100 Subject: [PATCH] tweak: nested empty arrays in objects --- src/DataObjectBuilder.php | 5 ++++- test/phpunit/DataObjectBuilderTest.php | 13 +++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/DataObjectBuilder.php b/src/DataObjectBuilder.php index 0c97023..8c73463 100644 --- a/src/DataObjectBuilder.php +++ b/src/DataObjectBuilder.php @@ -14,7 +14,10 @@ public function fromObject( $value = $this->fromObject($value, $dataObjectClass); } elseif(is_array($value)) { - if(is_int(key($value))) { + if(empty($value)) { + $value = []; + } + elseif(is_int(key($value))) { array_walk($value, function(&$element)use($dataObjectClass) { if(is_object($element)) { $element = $this->fromObject($element, $dataObjectClass); diff --git a/test/phpunit/DataObjectBuilderTest.php b/test/phpunit/DataObjectBuilderTest.php index da75048..887263e 100644 --- a/test/phpunit/DataObjectBuilderTest.php +++ b/test/phpunit/DataObjectBuilderTest.php @@ -193,4 +193,17 @@ public function testEmptyNestedArray():void { self::assertSame("value2", $output->getString("key2")); self::assertSame([], $output->getArray("nested")); } + + public function testEmptyNestedArrayInObject():void { + $object = (object)[ + "key1" => "value1", + "key2" => "value2", + "nested" => [], + ]; + $sut = new DataObjectBuilder(); + $output = $sut->fromObject($object); + + self::assertSame("value2", $output->getString("key2")); + self::assertSame([], $output->getArray("nested")); + } }