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; }
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; }