Skip to content

Commit 13274bb

Browse files
committed
added support for iterators
1 parent 175041e commit 13274bb

4 files changed

Lines changed: 33 additions & 4 deletions

File tree

src/Extension/CoreExtension.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1688,16 +1688,28 @@ function twig_array_batch($items, $size, $fill = null, $preserveKeys = true)
16881688

16891689
function twig_array_filter($array, $arrow)
16901690
{
1691-
return array_filter($array, $arrow);
1691+
if (\is_array($array)) {
1692+
return array_filter($array, $arrow);
1693+
}
1694+
1695+
return new \CallbackFilterIterator($array, $arrow);
16921696
}
16931697

16941698
function twig_array_map($array, $arrow)
16951699
{
1700+
if (!\is_array($array)) {
1701+
$array = iterator_to_array($array);
1702+
}
1703+
16961704
return array_map($arrow, $array);
16971705
}
16981706

16991707
function twig_array_reduce($array, $arrow, $initial = null)
17001708
{
1709+
if (!\is_array($array)) {
1710+
$array = iterator_to_array($array);
1711+
}
1712+
17011713
return array_reduce($array, $arrow, $initial);
17021714
}
17031715
}

test/Twig/Tests/Fixtures/filters/filter.test

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,12 @@
1414
{% for k, v in [1, 5, 3, 4, 5]|filter(v => v > offset) -%}
1515
{{ k }} = {{ v }}
1616
{% endfor %}
17+
18+
{% for k, v in it|filter((v) => v > offset) -%}
19+
{{ k }} = {{ v }}
20+
{% endfor %}
1721
--DATA--
18-
return []
22+
return ['it' => new \ArrayIterator(['a' => 1, 'b' => 2, 'c' => 5, 'd' => 2])]
1923
--EXPECT--
2024
1 = 5
2125
3 = 4
@@ -26,3 +30,5 @@ c = 5
2630
1 = 5
2731
3 = 4
2832
4 = 5
33+
34+
c = 5

test/Twig/Tests/Fixtures/filters/map.test

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,12 @@
1414
{% for k, v in [1, 2]|map(item => item + 2 ) -%}
1515
{{ k }} = {{ v }}
1616
{% endfor %}
17+
18+
{% for k, v in it|map(item => item + 2 ) -%}
19+
{{ k }} = {{ v }}
20+
{% endfor %}
1721
--DATA--
18-
return []
22+
return ['it' => new \ArrayIterator([1, 2])]
1923
--EXPECT--
2024
0 = 3
2125
1 = 4
@@ -25,3 +29,6 @@ b = 2*
2529

2630
0 = 3
2731
1 = 4
32+
33+
0 = 3
34+
1 = 4

test/Twig/Tests/Fixtures/filters/reduce.test

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@
44
{% set offset = 3 %}
55

66
{{ [1, -1, 4]|reduce((carry, item) => carry + item + offset, 10) }}
7+
8+
{{ it|reduce((carry, item) => carry + item + offset, 10) }}
79
--DATA--
8-
return []
10+
return ['it' => new \ArrayIterator([1, -1, 4])]
911
--EXPECT--
1012
23
13+
14+
23

0 commit comments

Comments
 (0)