src/DotKey.php
protected static function getValue($item, $index, $ignore = false, &$err = null)
    {
        $err = null;
        
        if (empty($index)) return $item;
        
        $key = array_shift($index);
        
        if ((is_array($item) || $item instanceof \Traversable) && isset($item[$key])) {
            return static::getValue($item[$key], $index, $ignore, $err);
        }
        
        if (is_object($item) && isset($item->$key)) {
            return static::getValue($item->$key, $index, $ignore, $err);
        }
        
        if ((!is_object($item) && !is_array($item)) || !$ignore) {
            $err = (object)['var' => isset($item) ? gettype($item) : null, 'incomplete' => count($index) + 1];
        }
        
        return null;
    }
protected static function getValue($item, $index, $ignore = false, &$err = null)
    {
        $err = null;
        
        if (empty($index)) return $item;
        
        $key = array_shift($index);
        
        if ((is_array($item) || $item instanceof \Traversable) && isset($item[$key])) {
            return static::getValue($item[$key], $index, $ignore, $err);
        }
        
        if (is_object($item) && isset($item->$key)) {
            return static::getValue($item->$key, $index, $ignore, $err);
        }
        
        if ((!is_object($item) && !is_array($item)) || !$ignore) {
            $err = (object)['var' => isset($item) ? gettype($item) : null, 'incomplete' => count($index) + 1];
        }
        
        return null;
    }
Navigate through the item and get the value

@param array  $item
@param array  $index   The index sequence we are navigating to
@param array  $ignore  Don't raise an error if not exists
@param object $err     Error object [OUTPUT]
@return mixed