diff --git a/src/ViewHelpers/VariableViewHelper.php b/src/ViewHelpers/VariableViewHelper.php
index d3a636c93..e889e3cde 100644
--- a/src/ViewHelpers/VariableViewHelper.php
+++ b/src/ViewHelpers/VariableViewHelper.php
@@ -30,6 +30,8 @@
* some value
* {oldvariable -> f:format.htmlspecialchars() -> f:variable(name: 'newvariable')}
* {oldvariable}
+ * {f:variable(name: 'myarray.mykey.mydeeperkey', value: 'some value')}
+ * some value
*
* @see \TYPO3Fluid\Fluid\ViewHelpers\IfViewHelper
* @api
@@ -55,6 +57,29 @@ public static function renderStatic(
RenderingContextInterface $renderingContext
) {
$value = $renderChildrenClosure();
- $renderingContext->getVariableProvider()->add($arguments['name'], $value);
+
+ if (!str_contains($arguments['name'], '.')) {
+ $renderingContext->getVariableProvider()->add($arguments['name'], $value);
+ return;
+ }
+
+ $seperated = explode('.', $arguments['name']);
+
+ $name = $seperated[0];
+ $keys = array_slice($seperated,1);
+
+ $object = $renderingContext->getVariableProvider()->get($name) ?: [];
+
+ $current = &$object;
+ foreach ($keys as $keySegment) {
+ if (!isset($current[$keySegment]) || !is_array($current[$keySegment])) {
+ $current[$keySegment] = [];
+ }
+ $current = &$current[$keySegment];
+ }
+ $current = $value;
+ unset($current);
+
+ $renderingContext->getVariableProvider()->add($name, $object);
}
}