MDL-33635 improve collatorlib::ksort() coding style and perf
authorPetr Skoda <commits@skodak.org>
Wed, 13 Jun 2012 14:37:56 +0000 (16:37 +0200)
committerPetr Skoda <commits@skodak.org>
Wed, 13 Jun 2012 14:37:56 +0000 (16:37 +0200)
Thanks Eloy Lafuente for spotting my sloppy coding style!

lib/tests/textlib_test.php
lib/textlib.class.php

index 68a1bf2..116f313 100644 (file)
@@ -476,6 +476,13 @@ class collatorlib_testcase extends basic_testcase {
         $this->assertSame(array_values($arr), array('aa', 'ab', 'áb', 'Áb', 'cc'), $this->error);
         $this->assertSame(array_keys($arr), array(1, 'b', 'a', 'x', 0), $this->error);
         $this->assertTrue($result);
+
+        $a = array(2=>'b', 1=>'c');
+        $c =& $a;
+        $b =& $a;
+        collatorlib::asort($b);
+        $this->assertSame($a, $b);
+        $this->assertSame($c, $b);
     }
 
     /**
@@ -565,6 +572,13 @@ class collatorlib_testcase extends basic_testcase {
         $this->assertSame(array_keys($arr), array('1.1.1', '1.2', '1.20.2'));
         $this->assertSame(array_values($arr), array(array(), $obj, null));
         $this->assertTrue($result);
+
+        $a = array(2=>'b', 1=>'c');
+        $c =& $a;
+        $b =& $a;
+        collatorlib::ksort($b);
+        $this->assertSame($a, $b);
+        $this->assertSame($c, $b);
     }
 }
 
index 14dcb5b..540e4a4 100644 (file)
@@ -872,10 +872,7 @@ class collatorlib {
         }
         // This is a bit slow, but we need to keep the references
         $original = $arr;
-        $count = count($arr);
-        for($i=0; $i<$count; $i++) {
-            array_pop($arr);
-        }
+        $arr = array(); // Surprisingly this does not break references outside
         foreach ($keys as $key) {
             $arr[$key] = $original[$key];
         }