0

Array_insersect は、配列内で文字列が完全に一致した場合にのみ結果を表示します。しかし、正確な記録ではなく、同様の記録を取得する必要があります。

$array1 = array("http://example.com/abc","http://google.com/xyz","http://yahoo.com/abc", "http://stackoverflow.com/mnr");
$array2 = array("http://example.com/xyz","http://w3schools.com/xyz","http://stackoverflow.com/abc");
$similarRecords = array_intersect($array1, $array2);

それは空を与えるでしょう。

こんなの探してる

$similarRecords = array("example.com");

どうすればこれを入手できますか。私に提案してください

4

7 に答える 7

1

これをお探しですか?

$array1 = array("http://example.com/abc", "http://google.com/xyz", "http://yahoo.com/abc", "http://stackoverflow.com/mnr");
$array2 = array("http://example.com/xyz", "http://w3schools.com/xyz", "http://stackoverflow.com/abc");

$newArray1 = array();
foreach ($array1 as $array1data) {
  $parse1 = parse_url($array1data);
  $newArray1[] = $parse1['host'];
}

$newArray2 = array();
foreach ($array2 as $array2data) {
  $parse2 = parse_url($array2data);
  $newArray2[] = $parse2['host'];
}

$similarRecords = array_intersect($newArray1, $newArray2);

print_r($similarRecords);

出力

Array ( [0] => example.com [3] => stackoverflow.com ) 
于 2013-03-01T10:03:17.593 に答える
1

文字列処理を行う必要があり、各文字列からドメイン名を取り出して比較するだけです。

これは機能します:

$array1 = array("http://example.com/abc","http://google.com/xyz","http://yahoo.com/abc", "http://stackoverflow.com/mnr");
$array2 = array("http://example.com/xyz","http://w3schools.com/xyz","http://stackoverflow.com/abc");

$similarRecords = array_intersect(array_map("parseURLs", $array1), array_map("parseURLs", $array2));
print_r($similarRecords);

function parseURLs($strURL) {
  $parts = parse_url($strURL);
  return $parts['host'];
}

出力は次のとおりです。

Array ( [0] => example.com [3] => stackoverflow.com ) 
于 2013-03-01T10:03:26.230 に答える
1

Try this:

function domain($n){
    $url = parse_url($n);
    return $url['host'];
}

$array1 = array("http://example.com/abc","http://google.com/xyz","http://yahoo.com/abc", "http://stackoverflow.com/mnr");
$array2 = array("http://example.com/xyz","http://w3schools.com/xyz","http://stackoverflow.com/abc");

$similarRecords = array_intersect(array_map("domain", $array1), array_map("domain", $array2));

echo "<pre>";
print_r($similarRecords);

Output :

Array
(
    [0] => example.com
    [3] => stackoverflow.com
)
于 2013-03-01T10:05:52.907 に答える
1

similar_text を使用して比較できます。唯一の問題は、比較可能性係数が恣意的に見えることです。

<?php
$array1 = array("http://example.com/abc","http://google.com/xyz","http://yahoo.com/abc", "http://stackoverflow.com/mnr");
$array2 = array("http://example.com/xyz","http://w3schools.com/xyz","http://stackoverflow.com/abc");
print_r($array1);
print_r($array2);
echo "\n";

foreach ($array1 as $slice)
{
        foreach ($array2 as $slice2)
        {
                echo 'Comparing '.$slice.' to '.$slice2.' gives comparability of '.similar_text($slice,$slice2)."\n";
                if (similar_text($slice,$slice2) > 18)
                {
                        echo $slice.' ____is similar to___ '.$slice2."\n";
                }
        }
}
?>

出力:

Comparing http://example.com/abc to http://example.com/xyz gives comparability of 19
http://example.com/abc ____is similar to___ http://example.com/xyz
Comparing http://example.com/abc to http://w3schools.com/xyz gives comparability of 13
Comparing http://example.com/abc to http://stackoverflow.com/abc gives comparability of 17
Comparing http://google.com/xyz to http://example.com/xyz gives comparability of 17
Comparing http://google.com/xyz to http://w3schools.com/xyz gives comparability of 18
Comparing http://google.com/xyz to http://stackoverflow.com/abc gives comparability of 14
Comparing http://yahoo.com/abc to http://example.com/xyz gives comparability of 13
Comparing http://yahoo.com/abc to http://w3schools.com/xyz gives comparability of 15
Comparing http://yahoo.com/abc to http://stackoverflow.com/abc gives comparability of 18
Comparing http://stackoverflow.com/mnr to http://example.com/xyz gives comparability of 14
Comparing http://stackoverflow.com/mnr to http://w3schools.com/xyz gives comparability of 16
Comparing http://stackoverflow.com/mnr to http://stackoverflow.com/abc gives comparability of 25
http://stackoverflow.com/mnr ____is similar to___ http://stackoverflow.com/abc

そのため、一致したものを配列に入れて後で出力します。

于 2013-03-01T10:13:31.330 に答える
1

「類似」レコードを見つける組み込みの方法はありません (主に「類似」には多くの定義があるためです!)。ただし、配列の 1 つを反復処理し、他の配列に同様の要素があるかどうかを調べることで、手動で行うことができます。

function keepSimilars (array $first, array $second) {
  $result = array();
  foreach ($first as $elem) {
    $base = getBase($elem);
    $found = false;
    foreach ($second as $elem2)
      if ($base = getBase($elem2)) {
        $found = true;
        break;
      }
    if ($found) $result[] = $base;
  }
  return $result;
}

もちろん、getBase()文字列の基本部分、一致させたい部分を提供する関数(定義する必要がある)はどこにありますか(あなたにgetBase('http://example.com/abc')与えるべきですexample.com)。コールバックを使用することもできます。

于 2013-03-01T10:00:28.523 に答える
0

このすべてのおかげで、私は最終的にやったことです。

<?php
$array1 = array("http://example.com/abc","http://google.com/xyz","http://yahoo.com/abc", "http://stackoverflow.com/mnr");
$array2 = array("http://example.com/xyz","http://w3schools.com/xyz","http://stackoverflow.com/abc");
echo "<pre>";
print_r($array1);
echo "<br/>";
print_r($array2);
echo "<br/>";
$similarRecords = similarRecords($array1, $array2);
print_r($similarRecords);
echo "</pre>";
function getDomain($strURL)
{
    $url = parse_url($strURL);
    return $url['host'];
}

function similarRecords($array1, $array2)
{
    $similarRecords = array();
    foreach ($array1 as $slice)
    {
        foreach ($array2 as $slice2)
        {
            if (getDomain($slice) == getDomain($slice2))
            {
                $similarRecords[] = $slice; 
                $similarRecords[] = $slice2; 
            }
        }
    }

    return $similarRecords;
}
?>
于 2013-03-04T08:13:15.247 に答える
0

おそらく、array_search() または array_uintersect() を使用して 1 つの配列をループし、もう一方の配列を緩やかに検索するか、strpos へのコールバックを使用して uintersect を使用できます。

于 2013-03-01T10:00:00.570 に答える