0

さまざまなサイト リンクを含む多次元配列があります。出力は次のとおりです。

Array
(
    [0] => Array
        (
            [0] => http://www.msn.com/etc
            [1] => http://www.yahoo.com/etc
            [2] => http://www.google.com
        )

    [1] => Array
        (
            [0] => http://www.abc.com/etc
            [1] => http://www.hotmail.com/etc
            [2] => http://www.hotmail.com/page/2
        )

    [2] => Array
        (
            [0] => http://www.live.com/etc
            [1] => http://www.google.com/etc
            [2] => http://www.stock.com
        )

)

複数の URL を照合したいのですが、ここに私のコード例を示します。

$sites = array("msn.com","hotmail.com","live.com");
$links = array(
    array("http://www.msn.com/1","http://www.yahoo.com/etc","http://www.google.com"),
    array("http://www.msn.com/2","http://www.hotmail.com/","http://www.hotmail.com/page/2"),
    array("http://www.live.com/etc","http://www.google.com/etc","http://www.stock.com")
);

$sites にあるすべてのサイトが必要です。最初に $links 配列から msn.com サイトを見つけるので、最初の配列 ($links[0]) で msn.com が見つかった場合、他の $links で msn.com を検索しません。配列を検索しますが、他のもの (hotmail.com と live.com) を検索し続けます。1 つの配列に同じホストの 2 つのリンクが見つかった場合、それらを結合します。つまり、1 つの配列要素にホストが見つかった場合、そのホストは検索されません。 $links 配列の他の要素にあるため、上記の最終出力は次のようになります。

Array
(
    [msn] => Array
        (
            [0] => http://www.msn.com/1
        )

    [hotmail] => Array
        (
            [0] => http://www.hotmail.com/
            [1] => http://www.hotmail.com/page/2
        )

    [live] => Array
        (
            [0] => http://www.live.com/etc
        )

)

このタスクを実行する方法がわかりません。ご意見をお寄せいただければ幸いです。ありがとう

4

2 に答える 2

3

私があなたに与えるのは疑似コードです。

for each of the links arrays
    for each of the non eliminated sites
        find all the matching entries in this link array, for this site
        if theres at least one match
            eliminate this site from the list
            store the matches into a results array indexed by sitename, 
            --for example $results[$sitename] = $matchesArray

楽しんで

于 2012-05-13T15:48:25.793 に答える
-1

完全なコードは次のとおりです。

$final = array();
foreach($sites as $site)
{
    $found = false;
    foreach($links as $link_batch)
    {   
        foreach($link_batch as $link)
        {
            if(strpos($link, $site))
            {
                $found = true;
                $final[$site][] = $link;
            }
        }
        if($found)
        {
            break;
        }
    }
}
print_r($final);
于 2012-05-13T15:59:05.267 に答える