Example #1
0
 public function groupByPatterns(array $urls)
 {
     $indexes = array();
     $groups = array();
     $patterns = array();
     foreach ($urls as $url) {
         $parts = array_filter($url->getParts(), function ($element) {
             return $element->getType() == Component::CONSTANT;
         });
         if (empty($parts)) {
             $patterns[] = $url;
             continue;
         }
         foreach ($indexes as $id => $pattern) {
             if ($this->belongsToGroup($pattern, $parts)) {
                 $groups[$id][] = $url;
                 continue 2;
             }
         }
         $groups[] = array($url);
         for ($i = 1; $i <= count($parts); $i++) {
             $indexes[] = array_slice($parts, 0, $i);
         }
     }
     if (count($groups) > 1) {
         foreach ($indexes as $id => $rules) {
             if (empty($groups[$id])) {
                 continue;
             }
             if (count($groups[$id]) == 1) {
                 // if the group has just *one*
                 // element
                 $patterns[] = $groups[$id][0];
                 continue;
             }
             $pattern = new UrlGroup_If($rules);
             foreach ($groups[$id] as $id => $url) {
                 $pattern->addUrl($url, $id);
             }
             $patterns[] = $pattern;
         }
         return $patterns;
     }
     return $urls;
 }
Example #2
0
 public function groupByPatterns(array $urls)
 {
     $indexes = array();
     list($groups, $patterns, $indexes) = $this->getUrlGroupsPatternsIndexes($urls);
     if (count($groups) > 1) {
         foreach ($indexes as $id => $rules) {
             if (empty($groups[$id])) {
                 continue;
             }
             if (count($groups[$id]) == 1) {
                 // if the group has just *one*
                 // element
                 $patterns[] = $groups[$id][0];
                 continue;
             }
             $pattern = new UrlGroup_If($rules);
             foreach ($groups[$id] as $id => $url) {
                 $pattern->addUrl($url, $id);
             }
             $patterns[] = $pattern;
         }
         return $patterns;
     }
     return $urls;
 }