]> git.andy128k.dev Git - missing-tools.git/commitdiff
add pop array utility
authorAndrey Kutejko <andy128k@gmail.com>
Sat, 10 Aug 2013 18:31:29 +0000 (21:31 +0300)
committerAndrey Kutejko <andy128k@gmail.com>
Sat, 10 Aug 2013 18:31:29 +0000 (21:31 +0300)
src/arraytools.php
t/ArrayTest.php

index 5d177bd9de57ee813fe6e284e300692d902cc736..3550f3caaf899d7825e08d67b6bd3199a7fdaf20 100644 (file)
@@ -23,5 +23,16 @@ final class ArrayTools
         else
             return $array[$key] = array($value);
     }
+
+    public static function pop(&$array, $key, $default=null)
+    {
+        if (array_key_exists($key, $array)) {
+            $value = $array[$key];
+            unset($array[$key]);
+            return $value;
+        } else {
+            return $default;
+        }
+    }
 }
 
index 687326f0ec4bcd2de2d573c65d39781b051005cb..de15380e849331e04711b72c268e8c9a1b26f576 100644 (file)
@@ -39,5 +39,24 @@ class ArrayToolsTest extends PHPUnit_Framework_TestCase
         $this->assertEquals(array('green', 'sweet'), $arr['apple']);
         $this->assertEquals(array('orange', 'long'), $arr['carrot']);
     }
+
+    public function testPop()
+    {
+        $arr = array(
+            'apple' => 100,
+            'grapefruit' => 400,
+            'carrot' => 50,
+        );
+
+        $apple = ArrayTools::pop($arr, 'apple');
+        $this->assertEquals(false, array_key_exists('apple', $arr));
+        $this->assertEquals(100, $apple);
+
+        $apple = ArrayTools::pop($arr, 'apple');
+        $this->assertEquals(null, $apple);
+
+        $apple = ArrayTools::pop($arr, 'apple', 'what?');
+        $this->assertEquals('what?', $apple);
+    }
 }