SitePoint Sponsor

User Tag List

Results 1 to 2 of 2
  1. #1
    SitePoint Member
    Join Date
    Jun 2011
    Posts
    3
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Accessing multi dimensional array values with a slash separated parameter

    Hi, I need to add a method to my data class to allow other developers (designers really with very limited coding knowledge) to access data in a multidimensional array.

    See the following code for what I'm trying to achieve and how far I've got..(not very)

    I'm not sure which road to take, I was thinking I would look for the last array value and work back looking for a parent key with the preceding value.

    Is there a better way?

    PHP Code:

    $data 
    = new Data();
    echo 
    $data->get('/location/address/street');

    class 
    Data
    {
        protected 
    $pathSeparator '/';
        protected 
    $data = array(
            
    'name' => array(
                
    'first' => 'John',
                
    'last' => 'Smith',
            ),
            
    'location' => array(
                
    'address' => array(
                    
    'street' => '9454 Wilshire Blvd',
                    
    'city' => 'Beverly Hills',
                    
    'state' => 'CA',
                    
    'country' => 'United States',
                    
    'zip' => '90212-2911'
                
    ),
                
    'geo' => array(
                    
    'latitude' => '0',
                    
    'longitude' => '0',
                ),
            ),
            
    'email' => 'johnsmith@bmail.com'
        
    );

        public function 
    get($path)
        {
            
    $path rtrim($path$this->pathSeparator);
            
    $array explode($this->pathSeparator$path);

        }



  2. #2
    SitePoint Enthusiast
    Join Date
    Dec 2010
    Location
    Canada, Alberta
    Posts
    50
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Hmmm, if I understand correctly, you want to return the array value based on the string entered in the get() method?

    if so, you could run the function recursively
    PHP Code:
    class Data
    {
        protected 
    $pathSeparator '/';
        protected 
    $data = array(
            
    'name' => array(
                
    'first' => 'John',
                
    'last' => 'Smith',
            ),
            
    'location' => array(
                
    'address' => array(
                    
    'street' => '9454 Wilshire Blvd',
                    
    'city' => 'Beverly Hills',
                    
    'state' => 'CA',
                    
    'country' => 'United States',
                    
    'zip' => '90212-2911'
                
    ),
                
    'geo' => array(
                    
    'latitude' => '0',
                    
    'longitude' => '0',
                ),
            ),
            
    'email' => 'johnsmith@bmail.com'
        
    );

        public function 
    get($path, array $data = array())
        {
            
    $path rtrim($path$this->pathSeparator);
            
            
    //+ Remove firt /
            
    $path ltrim($path$this->pathSeparator);
            
            
    $array explode($this->pathSeparator$path);
            
            
    //+ just declaring a new variable, don't really need this
            
    $newArray null;
            
            
    //+ get the first array and reset the pointer
            
    $first reset($array);
            
            
    //+ for the recursive function
            
    if( empty($data) ){
            
                
    $data $this->data;
            
            }
            
            
    //+ check if array exists
            
    if( isset($data[$first]) ){
                
                
    //+ the value to return
                
    $newArray $data[$first];
                
                
    //+ check for next array
                
    $next next($array);
                
                
    //+ if is array, run the method recursively
                
    if( is_array($newArray) && $next !== false ){
                
                    
    array_shift$array );
                    
    $newPath implode$this->pathSeparator,  $array);
                    
    $value $this->get($newPath$newArray);
                    
                    
                }else{
                    
    $value $newArray;
                }
                
                return 
    $value;
                
            }
            
            return 
    null;

        }

    }

    $data = new Data();
    print_r$data->get('/location/address') ); 
    I'm not entirely sure what you mean by :

    allow other developers (designers really with very limited coding knowledge) to access data in a multidimensional array
    is that a permissions thing?


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •