diff --git a/src/Symfony/Component/Serializer/Encoder/CsvEncoder.php b/src/Symfony/Component/Serializer/Encoder/CsvEncoder.php index 55f78b1d0e013..a2d4df909dce8 100644 --- a/src/Symfony/Component/Serializer/Encoder/CsvEncoder.php +++ b/src/Symfony/Component/Serializer/Encoder/CsvEncoder.php @@ -181,18 +181,24 @@ public function decode(string $data, string $format, array $context = []) $depth = $headerCount[$i]; $arr = &$item; for ($j = 0; $j < $depth; ++$j) { + $headerName = $headers[$i][$j]; + + if ('' === $headerName) { + $headerName = $i; + } + // Handle nested arrays if ($j === ($depth - 1)) { - $arr[$headers[$i][$j]] = $cols[$i]; + $arr[$headerName] = $cols[$i]; continue; } - if (!isset($arr[$headers[$i][$j]])) { - $arr[$headers[$i][$j]] = []; + if (!isset($arr[$headerName])) { + $arr[$headerName] = []; } - $arr = &$arr[$headers[$i][$j]]; + $arr = &$arr[$headerName]; } } diff --git a/src/Symfony/Component/Serializer/Tests/Encoder/CsvEncoderTest.php b/src/Symfony/Component/Serializer/Tests/Encoder/CsvEncoderTest.php index 06cf6a0617d86..3d2163c06e923 100644 --- a/src/Symfony/Component/Serializer/Tests/Encoder/CsvEncoderTest.php +++ b/src/Symfony/Component/Serializer/Tests/Encoder/CsvEncoderTest.php @@ -218,7 +218,13 @@ public function testDecodeEmptyData() { $data = $this->encoder->decode("\n\n", 'csv'); - $this->assertSame([['' => null]], $data); + $this->assertSame([[0 => null]], $data); + } + + public function testMultipleEmptyHeaderNamesWithSeparator() + { + $this->encoder->decode(',. +,', 'csv'); } public function testEncodeVariableStructure()