Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- abstract class RecursiveArrayHelper {
- /**
- * @var string
- */
- static private $separator='.';
- /**
- * @param array $array
- * @param string $key
- * @return bool
- */
- static public function has(array $array, $key) {
- assert('is_scalar($key)');
- $keyParts = self::getKeyParts($key);
- return self::hasKeyParts($array, $keyParts);
- }
- /**
- * @param array $array
- * @param string $key
- * @param mixed $default
- * @return mixed
- */
- static public function get(array $array, $key, $default=null) {
- assert('is_scalar($key)');
- $keyParts = self::getKeyParts($key);
- return self::getByKeyParts($array, $keyParts, $default);
- }
- /**
- * @param array $array
- * @param string $key
- * @param mixed $value
- * @return array
- */
- static public function set(array $array, $key, $value) {
- assert('is_scalar($key)');
- $keyParts = self::getKeyParts($key);
- $array = self::setByKeyParts($array, $keyParts, $value);
- return $array;
- }
- /**
- * @return string
- */
- static public function getSeparator() {
- return self::$separator;
- }
- /**
- * @param string $separator
- * @return void
- */
- static public function setSeparator($separator) {
- assert('is_string($key) && strlen($separator)>0');
- self::$separator = $separator;
- }
- /**
- * @param array $array
- * @param array $keyParts
- * @return bool
- */
- static private function hasKeyParts(array $array, array $keyParts) {
- $currentKey = array_shift($keyParts);
- if(array_key_exists($currentKey, $array)) {
- if(!count($keyParts)) {
- return true;
- } else {
- return self::hasKeyParts($array[$currentKey], $keyParts);
- }
- }
- return false;
- }
- /**
- * @param array $array
- * @param array $keyParts
- * @param mixed $default
- * @return mixed
- */
- static private function getByKeyParts(array $array, array $keyParts, $default) {
- $currentKey = array_shift($keyParts);
- if(array_key_exists($currentKey, $array)) {
- if(!count($keyParts)) {
- return $array[$currentKey];
- } else {
- return self::getByKeyParts($array[$currentKey], $keyParts, $default);
- }
- }
- return $default;
- }
- /**
- * @param array $array
- * @param array $keyParts
- * @param mixed $value
- * @return array
- */
- static private function setByKeyParts(array $array, array $keyParts, $value) {
- $currentKey = array_shift($keyParts);
- if(!array_key_exists($currentKey, $array)) {
- $array[$currentKey] = array();
- }
- if(!count($keyParts)) {
- $array[$currentKey] = $value;
- return $array;
- }
- $array[$currentKey] = self::setByKeyParts($array[$currentKey], $keyParts, $value);
- return $array;
- }
- /**
- * @param string $key
- * @return array
- */
- static private function getKeyParts($key) {
- return explode(self::$separator, $key);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement