SHARE
TWEET

RecursiveArrayHelper

a guest Mar 6th, 2012 49 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top