mirror of
https://github.com/twigphp/Twig.git
synced 2026-09-14 11:27:00 +00:00
made a optimization when a loop iterator also implements Countable
git-svn-id: http://svn.twig-project.org/trunk@120 93ef8e89-cb99-4229-a87c-7fa0fa45744b
This commit is contained in:
@@ -185,7 +185,7 @@ function twig_iterator_to_array($seq)
|
||||
}
|
||||
elseif (is_object($seq) && $seq instanceof Traversable)
|
||||
{
|
||||
return iterator_to_array($seq);
|
||||
return $seq instanceof Countable ? $seq : iterator_to_array($seq);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Vendored
+12
@@ -3,6 +3,10 @@
|
||||
--TEMPLATE--
|
||||
{% for item in items %}
|
||||
* {{ item }}
|
||||
* {{ loop.index }}/{{ loop.index0 }}
|
||||
* {{ loop.revindex }}/{{ loop.revindex0 }}
|
||||
* {{ loop.first }}/{{ loop.last }}/{{ loop.length }}
|
||||
|
||||
{% endfor %}
|
||||
|
||||
{% for key, value in items|items %}
|
||||
@@ -25,7 +29,15 @@ class ItemsIterator implements Iterator
|
||||
return array('items' => new ItemsIterator())
|
||||
--EXPECT--
|
||||
* bar
|
||||
* 1/0
|
||||
* 2/1
|
||||
* 1//2
|
||||
|
||||
* foo
|
||||
* 2/1
|
||||
* 1/0
|
||||
* /1/2
|
||||
|
||||
|
||||
* foo/bar
|
||||
* bar/foo
|
||||
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
--TEST--
|
||||
"for" tag iterates over iterable and countable objects
|
||||
--TEMPLATE--
|
||||
{% for item in items %}
|
||||
* {{ item }}
|
||||
{% endfor %}
|
||||
|
||||
{% for key, value in items|items %}
|
||||
* {{ key }}/{{ value }}
|
||||
{% endfor %}
|
||||
|
||||
{% for key in items|keys %}
|
||||
* {{ key }}
|
||||
{% endfor %}
|
||||
--DATA--
|
||||
class ItemsIteratorCountable implements Iterator, Countable
|
||||
{
|
||||
protected $values = array('foo' => 'bar', 'bar' => 'foo');
|
||||
public function current() { return current($this->values); }
|
||||
public function key() { return key($this->values); }
|
||||
public function next() { return next($this->values); }
|
||||
public function rewind() { return reset($this->values); }
|
||||
public function valid() { return false !== current($this->values); }
|
||||
public function count() { return count($this->values); }
|
||||
}
|
||||
return array('items' => new ItemsIterator())
|
||||
--EXPECT--
|
||||
* bar
|
||||
* foo
|
||||
|
||||
* foo/bar
|
||||
* bar/foo
|
||||
|
||||
* foo
|
||||
* bar
|
||||
@@ -35,7 +35,7 @@ class Foo
|
||||
}
|
||||
}
|
||||
|
||||
$t = new LimeTest(50);
|
||||
$t = new LimeTest(51);
|
||||
$fixturesDir = realpath(dirname(__FILE__).'/../fixtures/');
|
||||
|
||||
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($fixturesDir), RecursiveIteratorIterator::LEAVES_ONLY) as $file)
|
||||
|
||||
Reference in New Issue
Block a user