fixed batch filter clobbers array keys when fill parameter is used

This commit is contained in:
Fabien Potencier
2019-03-12 10:48:58 +01:00
parent ede9a604eb
commit 750cb23742
3 changed files with 27 additions and 1 deletions
+1
View File
@@ -1,5 +1,6 @@
* 1.38.0 (2019-XX-XX)
* fixed batch filter clobbers array keys when fill parameter is used
* added preserveKeys support for the batch filter
* fixed "embed" support when used from "template_from_string"
* added the possibility to pass a TemplateWrapper to Twig\Environment::load()
+3 -1
View File
@@ -1651,7 +1651,9 @@ function twig_array_batch($items, $size, $fill = null, $preserveKeys = true)
if (null !== $fill && $result) {
$last = \count($result) - 1;
if ($fillCount = $size - \count($result[$last])) {
$result[$last] = array_merge($result[$last], array_fill(0, $fillCount, $fill));
for ($i = 0; $i < $fillCount; $i++) {
$result[$last][] = $fill;
}
}
}
@@ -0,0 +1,23 @@
--TEST--
"batch" filter
--TEMPLATE--
{% for row in items|batch(3, 'fill') %}
<div class=row>
{% for key, column in row %}
<div class={{ key }}>{{ column }}</div>
{% endfor %}
</div>
{% endfor %}
--DATA--
return ['items' => ['a' => 'a', 'b' => 'b', 'c' => 'c', 'd' => 'd', '123' => 'e']]
--EXPECT--
<div class=row>
<div class=a>a</div>
<div class=b>b</div>
<div class=c>c</div>
</div>
<div class=row>
<div class=d>d</div>
<div class=123>e</div>
<div class=124>fill</div>
</div>