Show
Ignore:
Timestamp:
02/18/2008 11:56:54 AM (11 months ago)
Author:
Shadowhand
Message:

Optimized URI methods:

  • URI::build_array() created as a helper for argument_array, segment_array, and rsegment_array
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/system/libraries/URI.php

    r1911 r2074  
    103103        public function segment_array($offset = 0, $associative = FALSE) 
    104104        { 
    105                 $segment_array = self::$segments; 
    106                 array_unshift($segment_array, 0); 
    107                 $segment_array = array_slice($segment_array, $offset + 1, $this->total_segments(), TRUE); 
    108  
    109                 if ( ! $associative) 
    110                         return $segment_array; 
    111  
    112                 $segment_array_assoc = array(); 
    113  
    114                 foreach (array_chunk($segment_array, 2) as $pair) 
    115                 { 
    116                         $segment_array_assoc[$pair[0]] = isset($pair[1]) ? $pair[1] : ''; 
    117                 } 
    118  
    119                 return $segment_array_assoc; 
     105                return $this->build_array(self::$segments, $offset, $associative); 
    120106        } 
    121107 
     
    129115        public function rsegment_array($offset = 0, $associative = FALSE) 
    130116        { 
    131                 $segment_array = self::$rsegments; 
    132                 array_unshift($segment_array, 0); 
    133                 $segment_array = array_slice($segment_array, $offset + 1, $this->total_segments(), TRUE); 
    134  
    135                 if ( ! $associative) 
    136                         return $segment_array; 
    137  
    138                 $segment_array_assoc = array(); 
    139  
    140                 foreach (array_chunk($segment_array, 2) as $pair) 
    141                 { 
    142                         $segment_array_assoc[$pair[0]] = isset($pair[1]) ? $pair[1] : ''; 
    143                 } 
    144  
    145                 return $segment_array_assoc; 
     117                return $this->build_array(self::$rsegments, $offset, $associative); 
    146118        } 
    147119 
     
    155127        public function argument_array($offset = 0, $associative = FALSE) 
    156128        { 
    157                 $argument_array = self::$arguments; 
    158                 array_unshift($argument_array, 0); 
    159                 $argument_array = array_slice($argument_array, $offset + 1, $this->total_arguments(), TRUE); 
    160  
    161                 if ( ! $associative) 
    162                         return $argument_array; 
    163  
    164                 $argument_array_assoc = array(); 
    165  
    166                 foreach (array_chunk($argument_array, 2) as $pair) 
    167                 { 
    168                         $argument_array_assoc[$pair[0]] = isset($pair[1]) ? $pair[1] : ''; 
    169                 } 
    170  
    171                 return $argument_array_assoc; 
     129                return $this->build_array(self::$arguments, $offset, $associative); 
     130        } 
     131 
     132        /** 
     133         * Creates a simple or associative array from an array and an offset. 
     134         * Used as a helper for (r)segment_array and argument_array. 
     135         * 
     136         * @param   array    array to rebuild 
     137         * @param   integer  offset to start from 
     138         * @param   bool     create an associative array 
     139         * @return  array 
     140         */ 
     141        public function build_array($array, $offset = 0, $associative = FALSE) 
     142        { 
     143                // Prevent the keys from being improperly indexed 
     144                array_unshift($array, 0); 
     145 
     146                // Slice the array, preserving the keys 
     147                $array = array_slice($array, $offset + 1, count($array) - 1, TRUE); 
     148 
     149                if ($associative === FALSE) 
     150                        return $array; 
     151 
     152                $associative = array(); 
     153                foreach (array_chunk($array, 2) as $pair) 
     154                { 
     155                        // Add the key/value pair to the associative array 
     156                        $associative[$pair[0]] = isset($pair[1]) ? $pair[1] : ''; 
     157                } 
     158 
     159                return $associative; 
    172160        } 
    173161 
     
    189177        public function __toString() 
    190178        { 
    191                 return $this->string(); 
     179                return self::$current_uri; 
    192180        } 
    193181 
     
    230218        public function last_segment($default = FALSE) 
    231219        { 
    232                 if ($this->total_segments() < 1) 
     220                if (($end = $this->total_segments()) < 1) 
    233221                        return $default; 
    234222 
    235                 return end(self::$segments); 
     223                return self::$segments[$end - 1]; 
    236224        } 
    237225 
     
    244232        public function last_rsegment($default = FALSE) 
    245233        { 
    246                 if ($this->total_rsegments() < 1) 
     234                if (($end = $this->total_segments()) < 1) 
    247235                        return $default; 
    248236 
    249                 return end(self::$rsegments); 
     237                return self::$rsegments[$end - 1]; 
    250238        } 
    251239