1cf22df2fSAndreas Gohr<?php 2cf22df2fSAndreas Gohr 3cf22df2fSAndreas Gohrnamespace dokuwiki\plugin\oauthgeneric; 4cf22df2fSAndreas Gohr 5cf22df2fSAndreas Gohr/** 6cf22df2fSAndreas Gohr * Dot notation access to arrays 7cf22df2fSAndreas Gohr * 8cf22df2fSAndreas Gohr * @see https://stackoverflow.com/a/39118759/172068 9cf22df2fSAndreas Gohr */ 10cf22df2fSAndreas Gohrclass DotAccess 11cf22df2fSAndreas Gohr{ 12cf22df2fSAndreas Gohr 13cf22df2fSAndreas Gohr /** 14cf22df2fSAndreas Gohr * Get an item from an array using "dot" notation. 15cf22df2fSAndreas Gohr * 16cf22df2fSAndreas Gohr * @param \ArrayAccess|array $array 17cf22df2fSAndreas Gohr * @param string $key 18cf22df2fSAndreas Gohr * @param mixed $default 19cf22df2fSAndreas Gohr * @return mixed 20cf22df2fSAndreas Gohr */ 21cf22df2fSAndreas Gohr public static function get($array, $key, $default = null) 22cf22df2fSAndreas Gohr { 23*420dfed2SAndreas Gohr $key = trim($key, '.'); 24*420dfed2SAndreas Gohr 25cf22df2fSAndreas Gohr if (!static::accessible($array)) { 26cf22df2fSAndreas Gohr return $default; 27cf22df2fSAndreas Gohr } 28cf22df2fSAndreas Gohr if (is_null($key)) { 29cf22df2fSAndreas Gohr return $array; 30cf22df2fSAndreas Gohr } 31cf22df2fSAndreas Gohr if (static::exists($array, $key)) { 32cf22df2fSAndreas Gohr return $array[$key]; 33cf22df2fSAndreas Gohr } 34cf22df2fSAndreas Gohr if (strpos($key, '.') === false) { 35cf22df2fSAndreas Gohr return $array[$key] ?? $default; 36cf22df2fSAndreas Gohr } 37cf22df2fSAndreas Gohr foreach (explode('.', $key) as $segment) { 38cf22df2fSAndreas Gohr if (static::accessible($array) && static::exists($array, $segment)) { 39cf22df2fSAndreas Gohr $array = $array[$segment]; 40cf22df2fSAndreas Gohr } else { 41cf22df2fSAndreas Gohr return $default; 42cf22df2fSAndreas Gohr } 43cf22df2fSAndreas Gohr } 44cf22df2fSAndreas Gohr return $array; 45cf22df2fSAndreas Gohr } 46cf22df2fSAndreas Gohr 47cf22df2fSAndreas Gohr /** 48cf22df2fSAndreas Gohr * Determine whether the given value is array accessible. 49cf22df2fSAndreas Gohr * 50cf22df2fSAndreas Gohr * @param mixed $value 51cf22df2fSAndreas Gohr * @return bool 52cf22df2fSAndreas Gohr */ 53cf22df2fSAndreas Gohr protected static function accessible($value) 54cf22df2fSAndreas Gohr { 55cf22df2fSAndreas Gohr return is_array($value) || $value instanceof \ArrayAccess; 56cf22df2fSAndreas Gohr } 57cf22df2fSAndreas Gohr 58cf22df2fSAndreas Gohr /** 59cf22df2fSAndreas Gohr * Determine if the given key exists in the provided array. 60cf22df2fSAndreas Gohr * 61cf22df2fSAndreas Gohr * @param \ArrayAccess|array $array 62cf22df2fSAndreas Gohr * @param string|int $key 63cf22df2fSAndreas Gohr * @return bool 64cf22df2fSAndreas Gohr */ 65cf22df2fSAndreas Gohr protected static function exists($array, $key) 66cf22df2fSAndreas Gohr { 67cf22df2fSAndreas Gohr if ($array instanceof \ArrayAccess) { 68cf22df2fSAndreas Gohr return $array->offsetExists($key); 69cf22df2fSAndreas Gohr } 70cf22df2fSAndreas Gohr return array_key_exists($key, $array); 71cf22df2fSAndreas Gohr } 72cf22df2fSAndreas Gohr} 73