2

私は 500 個の URL の大きな配列を持っているので、array_unique重複した値を削除することができます。ただし、元のドメインを維持しながら、ドメインが同じである重複値を削除したいと考えています (したがって、重複のみを削除して、この値が一意になるようにします)。

私は以下を使用していますが、これは重複した値のみを削除します:

$directurls = array_unique($directurls);

ドメインを取得するために次のことをいじっていますがparse_url、配列内の他のドメインについて配列全体を確認する方法を知りたいです。

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

これについて他の方法について提案や推奨事項があれば、私は非常に感謝しています.

もう少し説明が必要な場合はお知らせください。

4

1 に答える 1

2

array_map()コールバック関数を使用して URL をループする必要を回避できます。 を使用してドメインをparse_url()取得し、ドメインだけで新しい配列を作成します。array_unique()これで、URL をキー、ドメインを値として新しい配列を作成し、呼び出して一意の項目を取得するだけです。ここで、URL だけを新しい配列に取得するには、次を使用できますarray_keys()

$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)));

デモ!

于 2013-10-29T16:21:10.957 に答える