added preserveKeys support for the batch filter

This commit is contained in:
Fabien Potencier
2019-03-12 10:19:08 +01:00
parent 4eeaf763a2
commit ede9a604eb
3 changed files with 8 additions and 10 deletions
+1
View File
@@ -1,5 +1,6 @@
* 1.38.0 (2019-XX-XX)
* 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()
* improved the performance of the sandbox
+5 -8
View File
@@ -1638,23 +1638,20 @@ function twig_constant_is_defined($constant, $object = null)
*
* @return array
*/
function twig_array_batch($items, $size, $fill = null)
function twig_array_batch($items, $size, $fill = null, $preserveKeys = true)
{
if ($items instanceof \Traversable) {
$items = iterator_to_array($items, false);
$items = iterator_to_array($items, $preserveKeys);
}
$size = ceil($size);
$result = array_chunk($items, $size, true);
$result = array_chunk($items, $size, $preserveKeys);
if (null !== $fill && !empty($result)) {
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)
);
$result[$last] = array_merge($result[$last], array_fill(0, $fillCount, $fill));
}
}
@@ -1,8 +1,8 @@
--TEST--
"batch" filter preserves array keys
--TEMPLATE--
{{ {'foo': 'bar', 'key': 'value'}|batch(4)|first|keys|join(',') }}
{{ {'foo': 'bar', 'key': 'value'}|batch(4, 'fill')|first|keys|join(',') }}
{{ {'foo': 'bar', 'key': 'value'}|batch(4)|first|keys|join(',') }}
{{ {'foo': 'bar', 'key': 'value'}|batch(4, 'fill')|first|keys|join(',') }}
--DATA--
return []
--EXPECT--