Advertisement
Guest User

RecursiveArrayHelper

a guest
Mar 6th, 2012
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.77 KB | None | 0 0
  1. abstract class RecursiveArrayHelper {
  2.     /**
  3.      * @var string
  4.      */
  5.     static private $separator='.';
  6.    
  7.     /**
  8.      * @param array $array
  9.      * @param string $key
  10.      * @return bool
  11.      */
  12.     static public function has(array $array, $key) {
  13.         assert('is_scalar($key)');
  14.         $keyParts = self::getKeyParts($key);
  15.         return self::hasKeyParts($array, $keyParts);
  16.     }
  17.    
  18.     /**
  19.      * @param array $array
  20.      * @param string $key
  21.      * @param mixed $default
  22.      * @return mixed
  23.      */
  24.     static public function get(array $array, $key, $default=null) {
  25.         assert('is_scalar($key)');
  26.         $keyParts = self::getKeyParts($key);
  27.         return self::getByKeyParts($array, $keyParts, $default);
  28.     }
  29.    
  30.     /**
  31.      * @param array $array
  32.      * @param string $key
  33.      * @param mixed $value
  34.      * @return array
  35.      */
  36.     static public function set(array $array, $key, $value) {
  37.         assert('is_scalar($key)');
  38.         $keyParts = self::getKeyParts($key);
  39.         $array = self::setByKeyParts($array, $keyParts, $value);
  40.         return $array;
  41.     }
  42.    
  43.     /**
  44.      * @return string
  45.      */
  46.     static public function getSeparator() {
  47.         return self::$separator;
  48.     }
  49.    
  50.     /**
  51.      * @param string $separator
  52.      * @return void
  53.      */
  54.     static public function setSeparator($separator) {
  55.         assert('is_string($key) && strlen($separator)>0');
  56.         self::$separator = $separator;
  57.     }
  58.    
  59.     /**
  60.      * @param array $array
  61.      * @param array $keyParts
  62.      * @return bool
  63.      */
  64.     static private function hasKeyParts(array $array, array $keyParts) {
  65.         $currentKey = array_shift($keyParts);
  66.         if(array_key_exists($currentKey, $array)) {
  67.             if(!count($keyParts)) {
  68.                 return true;
  69.             } else {
  70.                 return self::hasKeyParts($array[$currentKey], $keyParts);
  71.             }
  72.         }
  73.         return false;
  74.     }
  75.    
  76.     /**
  77.      * @param array $array
  78.      * @param array $keyParts
  79.      * @param mixed $default
  80.      * @return mixed
  81.      */
  82.     static private function getByKeyParts(array $array, array $keyParts, $default) {
  83.         $currentKey = array_shift($keyParts);
  84.         if(array_key_exists($currentKey, $array)) {
  85.             if(!count($keyParts)) {
  86.                 return $array[$currentKey];
  87.             } else {
  88.                 return self::getByKeyParts($array[$currentKey], $keyParts, $default);
  89.             }
  90.         }
  91.         return $default;
  92.     }
  93.    
  94.     /**
  95.      * @param array $array
  96.      * @param array $keyParts
  97.      * @param mixed $value
  98.      * @return array
  99.      */
  100.     static private function setByKeyParts(array $array, array $keyParts, $value) {
  101.         $currentKey = array_shift($keyParts);
  102.         if(!array_key_exists($currentKey, $array)) {
  103.             $array[$currentKey] = array();
  104.         }
  105.         if(!count($keyParts)) {
  106.             $array[$currentKey] = $value;
  107.             return $array;
  108.         }
  109.         $array[$currentKey] = self::setByKeyParts($array[$currentKey], $keyParts, $value);
  110.         return $array;
  111.     }
  112.    
  113.     /**
  114.      * @param string $key
  115.      * @return array
  116.      */
  117.     static private function getKeyParts($key) {
  118.         return explode(self::$separator, $key);
  119.     }
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement