2017-01-21 15 views
0

PHPの2つのURL間の共通パターンを探したいと思います。 私はhttps://gist.github.com/chrisbloom7/1021218で遊んだことがありますが、これはURLに存在するワイルドカードを考慮していない最長一致を見つけた時点で停止します。2つのURLの間で共通のパターンを見つけるには

ここ2つの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