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