2013-10-29 3 views
2

나는 500 개의 URL을 말하도록 할 수 있습니다. array_unique 중복 값을 제거 할 수 있습니다. 그러나 원래 도메인을 유지하면서 도메인이 동일한 중복 값을 제거하려고합니다 (중복 제거 만하므로이 값이 이제는 고유합니다). 나는 다음과 같은 사용하고PHP 고유하지 않은 경우 배열에서 URL을 제거하십시오.

그러나 이것은 단지 중복 값을 제거 : 나는 도메인을 얻기 위해 다음과 같이 주위를 연주했지만 나는 다른 parse_url 도메인에 대한 전체 배열을 확인 할 수있는 방법 궁금

$directurls = array_unique($directurls); 

배열 :

foreach($directurls as $url) { 
$parse = parse_url($url); 
print $parse['host']; //the domain name I just need to find a way to check this and remove it 
} 

나는 현재 호스트를 얻을 수 및 배열에 다른 모든 호스트를 확인할 수 있습니다 어디 아마 루프의 형태를 사용해야합니다 상상한다. 중복되면 모든 중복을 제거하고 현재 값을 유지합니다. 어쩌면 이런 일이 지금 그것을 테스트하고 일할 수 :

foreach($directurls as $url) { 
    $parse = parse_url($url); 
    if (in_array($parse['host'], $directurls)) { 
     //just looking for a way to remove while keeping unique 
    } 
} 

을 사람이 어떤 제안이나 나는 매우 감사 할 것입니다 이것에 대해 이동하는 다른 방법에 대한 권장 사항이있는 경우.

좀 더 설명해야하는지 알려주세요.

+0

봐() – GordonM

+0

어떻게 당신은 URL이'원래 domain'이라고 말할 수 있을까? 예를 들어'gmail.google.com'과'plus.google.com'이 있다고합시다. – HamZa

+0

매우 정확할 필요는 없지만 이상적으로는 'example.com/apage','example.com/anotherpage', 'example.com/yetanotherpage'을 제거하고 싶습니다. 그래서 내 배열은 100 개의 URL로 채워지지 않습니다. 모두 같은 도메인. 그리고 지금 array_filter를 볼 것입니다. –

답변

2

array_map()을 콜백 함수와 함께 사용하여 URL을 반복하지 않아도됩니다. parse_url()을 사용하여 도메인을 가져오고 도메인만으로 새 배열을 만듭니다. 이제 키와 도메인의 URL을 값으로 사용하여 새 배열을 만들고 array_unique()을 호출하여 고유 항목을 가져올 수 있습니다. 이제, 새로운 배열에 단지 URL이, 당신이 array_keys()을 사용할 수 있습니다 얻을 : array_filter에서

$domains = array_map(function($d) { 
    $parts = parse_url($d); // or: parse_url($d)['host'] if PHP > 5.4 
    return $parts['host'];  
}, $directurls); 

$result = array_keys(array_unique(array_combine($directurls, $domains))); 

Demo!

관련 문제