Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
bug #51825 Fix order array sum normalizedData and nestedData (jerowork)
This PR was merged into the 6.3 branch. Discussion ---------- Fix order array sum normalizedData and nestedData | Q | A | ------------- | --- | Branch? | 6.3 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | #51823 | License | MIT ### Description With the update of Serializer to 6.3.5, some deserialization of array to objects does behave differently (changed order of priority of configuration via attribute `#[SerializedPath]` vs. property name, when there is a key on root level with the same name as the private property. Related to #49700. ### How to reproduce Example to explain changed behavior: ```json { "data": { "item": { "id": "id-1" } }, "id": "id-2" } ``` ```php final class SomeEvent { #[SerializedPath('[data][item][id]')] public string $id; } ``` Before 6.3.5, the value of the id was `id-1`, with the change of #49700, the value of the id becomes `id-2`. #49700 changes `array_merge` with `array + array`. It seems that the problem stated above is related to the fact that array_merge does overwrite keys differently than array + array: ```php $a = ['key' => 'value-a']; $b = ['key' => 'value-b']; var_dump(array_merge($a, $b)); // Results in: // array(1) { // ["key"]=> // string(7) "value-b" // } var_dump($a + $b); // Results in: // array(1) { // ["key"]=> // string(7) "value-a" // } ``` ### Solution As `array_merge` does behave slightly differently that array + array, the solution could be to switch array order to: ```diff - $normalizedData = $normalizedData + $nestedData; + $normalizedData = $nestedData + $normalizedData; ``` This would result in the same, while keeping the fix (#49700) for the numeric key value Commits ------- 67f49d4 Fix order array sum normalizedData and nestedData
- Loading branch information