added preserveKeys support for the slice filter (closes #669)
authorFabien Potencier <fabien.potencier@gmail.com>
Sat, 17 Mar 2012 11:42:06 +0000 (12:42 +0100)
committerFabien Potencier <fabien.potencier@gmail.com>
Sat, 17 Mar 2012 11:42:13 +0000 (12:42 +0100)
CHANGELOG
lib/Twig/Extension/Core.php
test/Twig/Tests/Fixtures/filters/slice.test

index 195f335..735dd68 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,6 @@
 * 1.7.0 (2012-XX-XX)
 
+ * added preserveKeys support for the slice filter
  * fixed the date filter when a DateTime instance is passed with a specific timezone
  * added a trim filter
 
index bdf25ff..ad7faaa 100644 (file)
@@ -559,21 +559,22 @@ function twig_array_merge($arr1, $arr2)
 /**
  * Slices a variable.
  *
- * @param Twig_Environment $env    A Twig_Environment instance
- * @param mixed            $item   A variable
- * @param integer          $start  Start of the slice
- * @param integer          $length Size of the slice
+ * @param Twig_Environment $env          A Twig_Environment instance
+ * @param mixed            $item         A variable
+ * @param integer          $start        Start of the slice
+ * @param integer          $length       Size of the slice
+ * @param Boolean          $preserveKeys Whether to preserve key or not (when the input is an array)
  *
  * @return mixed The sliced variable
  */
-function twig_slice(Twig_Environment $env, $item, $start, $length = null)
+function twig_slice(Twig_Environment $env, $item, $start, $length = null, $preserveKeys = false)
 {
     if ($item instanceof Traversable) {
         $item = iterator_to_array($item, false);
     }
 
     if (is_array($item)) {
-        return array_slice($item, $start, $length);
+        return array_slice($item, $start, $length, $preserveKeys);
     }
 
     $item = (string) $item;
index 0e3a563..bb32dfb 100644 (file)
@@ -5,7 +5,10 @@
 {{ {a: 1, b: 2, c: 3, d: 4}[1:2]|join('') }}
 {{ [1, 2, 3, 4][start:length]|join('') }}
 {{ [1, 2, 3, 4]|slice(1, 2)|join('') }}
+{{ [1, 2, 3, 4]|slice(1, 2)|keys|join('') }}
+{{ [1, 2, 3, 4]|slice(1, 2, true)|keys|join('') }}
 {{ {a: 1, b: 2, c: 3, d: 4}|slice(1, 2)|join('') }}
+{{ {a: 1, b: 2, c: 3, d: 4}|slice(1, 2)|keys|join('') }}
 {{ '1234'|slice(1, 2) }}
 {{ '1234'[1:2] }}
 {{ arr|slice(1, 2)|join('') }}
@@ -22,7 +25,10 @@ return array('start' => 1, 'length' => 2, 'arr' => new ArrayObject(array(1, 2, 3
 23
 23
 23
+01
+12
 23
+bc
 23
 23
 23