2017-01-21 12 views
0

PHP에서 2 개의 URL 사이에 공통적 인 패턴을 찾고 싶습니다. 나는 https://gist.github.com/chrisbloom7/1021218으로 놀았지만 URL에 존재하는 와일드 카드를 고려하지 않은 채로 가장 길게 일치하는 지점을 발견하면 멈 춥니 다.2 개의 URL 사이에 공통 패턴을 찾을 수있는 방법

여기에이 URL을

나는이 이상의 기능을 실행하는 경우는, 내 일반적인 패턴은 내가 무엇을 찾고 있어요 것은

http://example.com/collections/*/products/
입니다
http://example.com/collections/

입니다

누구든지 내가 어떻게 코드를 적용 할 수 있는지 안다 o 작동 시키거나 더 나은 방법이 있습니까? 대신 정규식의

답변

1

는 다음 URL을 구도 다음 배열의 각 요소를 비교 /에 URL을 분할 :

$url1 = 'http://example.com/collections/dresses/products/foo/dress.html'; 
$url2 = 'http://example.com/collections/shoes/products/shoe.html'; 

$part1 = explode('/', $url1); 
$part2 = explode('/', $url2); 

$common = array(); 
$len = count($part1); 
if (count($part2) < $len) $len = count($part2); 

for ($i = 0; $i < $len-1; $i++) { 
    if ($part1[$i] == $part2[$i]) { 
     $common[] = $part1[$i]; 
    } else { 
     $common[] = '*'; 
    } 
} 
$out = implode('/', $common); 
echo "$out\n"; 

출력 :

http://example.com/collections/*/products 
+0

멋진! URL에 명시 적으로 포함되지 않은 색인 페이지 (예 : )를 비교할 수있는 작은 조정을했습니다. http://example.com/collections/dresses http://example.com/collections/shoes if (substr ($ out , -1)! = "\ *") {$ out = $ out. "/ *"; } – illmatic