2016-03-26 4 views
1

ウェブサイトからすべてのリンクを取得し、すべてのリンクが壊れているかどうかをチェックするスクリプトを作成しています。私の問題は、私は創設されたすべてのリンクを表示する必要がありますが、私は重複ではなくユニークなリンクだけを検証する必要があるということです。たとえば、ウェブサイトにgoogle.comへのリンクが4つある場合、4回ではなく1回だけチェックします。PHP DOMページからすべてのマクロを取得して重複を取り除く

このコードは動作しますが、重複したリンクに対してhttpステータスを1回だけチェックする必要があります。

私はこれを行う方法がわかりませんし、そのようなことをする可能性がある場合もあります。

+1

配列を作成して、リンクが既に配列内にある場合はステータスを確認する前にチェックし、そうでない場合はリンクをスキップしリンクが存在する場合は配列を追加します。 –

+0

サンプルコードを表示できますか?私は本当にここにこだわった。 –

答えて

0

既にチェックされているすべてのリンクを保存するために使用できる配列を作成できます。リンクが既に配列内にあるかどうかを確認する前に、常にチェックします。その場合は、リンクをスキップしてください。そうでない場合は、ステータスをチェックしてアレイへのリンクを追加します。要素continueを使用して要素をスキップできます。

$links = array(); 
foreach ($dom->getElementsByTagName('a') as $node) { 
    $info = $node->getAttribute('href'); 

    if(!isset($links[$info])) { 
     ///The function that checks for broken links working. 
     $check_url_status = check_url($info); 
     $links[$info] = $check_url_status; 
    } else { 
     $check_url_status = $links[$info]; 
    } 

    if ($check_url_status == '404') { 
     $badresult = 'Not working'; 
    } else { 
     $badresult = 'Working'; 
    } 

    $showlist .= '<li>The '.$info.' is '.$badresult.'</li>'; 
} 

echo '<ul>'.$showlist.'</ul>'; 
+0

申し訳ありませんが実際に私が必要なもののために働いていない、それはまた、すべてのリンクを置き換えます。私はこのようなものにする必要があります: 'google.comは働いています、google.comは働いています、google.comは働いていますが、google.comを1回だけチェックし、リンクが3の場合は3回表示しますページ内の時間。 –

+0

今、完璧な、ありがとう。 –

0
$newArray  = array(); 
foreach($dom->getElementsByTagName('a') as $node) { 
    $info    = $node->getAttribute('href'); 
    if(!in_array($info, $newArray)) { 
     $newArray[]   = $info; 
     $check_url_status = check_url($info); 
     $badresult   = ($check_url_status == '404') ? 'Not working' : "Working" 
     $showlist .= '<li>The '.$info.' is '.$badresult.'</li>'; 
    } 
} 

それはif the hrefValue is not available into the arrayを意味状態に入るたびに、アレイを開始し、それに値をプッシュすることができます。

+0

ありがとう、あなたのコードも完璧に動作します。 –

+0

うん、いつも歓迎している@GeorgeGeorge – ameenulla0007

関連する問題