Browse Source

use a temp variable instead of the array

antograssiot 10 years ago
parent
commit
a718ac7222

+ 4 - 3
src/Collection/Iterator/SortIterator.php

@@ -67,10 +67,11 @@ class SortIterator extends Collection
         $callback = $this->_propertyExtractor($callback);
         $callback = $this->_propertyExtractor($callback);
         $results = [];
         $results = [];
         foreach ($items as $key => $value) {
         foreach ($items as $key => $value) {
-            $results[$key] = $callback($value);
-            if ($results[$key] instanceof \DateTime && $type === SORT_NUMERIC) {
-                $results[$key] = $results[$key]->format('U');
+            $value = $callback($value);
+            if ($value instanceof \DateTime && $type === SORT_NUMERIC) {
+                $value = $value->format('U');
             }
             }
+            $results[$key] = $value;
         }
         }
 
 
         $dir === SORT_DESC ? arsort($results, $type) : asort($results, $type);
         $dir === SORT_DESC ? arsort($results, $type) : asort($results, $type);

+ 16 - 13
tests/TestCase/Collection/Iterator/SortIteratorTest.php

@@ -201,32 +201,35 @@ class SortIteratorTest extends TestCase
     public function testSortDateTime()
     public function testSortDateTime()
     {
     {
         $items = new ArrayObject([
         $items = new ArrayObject([
-            new Time('2014-07-21'),
-            new Time('2015-06-30'),
-            new Time('2013-08-12')
+            new \DateTime('2014-07-21'),
+            new \DateTime('2015-06-30'),
+            new \DateTime('2013-08-12')
         ]);
         ]);
+        $a = new \DateTime();
+
         $callback = function ($a) {
         $callback = function ($a) {
-            return $a->addYear();
+            return $a->add(new \DateInterval('P1Y'));
         };
         };
         $sorted = new SortIterator($items, $callback);
         $sorted = new SortIterator($items, $callback);
         $expected = [
         $expected = [
-            new Time('2016-06-30'),
-            new Time('2015-07-21'),
-            new Time('2014-08-12')
+            new \DateTime('2016-06-30'),
+            new \DateTime('2015-07-21'),
+            new \DateTime('2014-08-12')
+
         ];
         ];
         $this->assertEquals($expected, $sorted->toList());
         $this->assertEquals($expected, $sorted->toList());
 
 
         $items = new ArrayObject([
         $items = new ArrayObject([
-            new Time('2014-07-21'),
-            new Time('2015-06-30'),
-            new Time('2013-08-12')
+            new \DateTime('2014-07-21'),
+            new \DateTime('2015-06-30'),
+            new \DateTime('2013-08-12')
         ]);
         ]);
 
 
         $sorted = new SortIterator($items, $callback, SORT_ASC);
         $sorted = new SortIterator($items, $callback, SORT_ASC);
         $expected = [
         $expected = [
-            new Time('2014-08-12'),
-            new Time('2015-07-21'),
-            new Time('2016-06-30'),
+            new \DateTime('2014-08-12'),
+            new \DateTime('2015-07-21'),
+            new \DateTime('2016-06-30'),
         ];
         ];
         $this->assertEquals($expected, $sorted->toList());
         $this->assertEquals($expected, $sorted->toList());
     }
     }