2016-11-24 18 views
2

今日、PHP DOMDocumentクラスを使用して、すべてのリンクをソースコードで検索しています。 $ links配列にはサイトからのすべてのリンクがあります。関数 'for'は与えられた$ domainを見つけるためにループ反復を使います。PHP 'for'ループで一度だけ表示

echo 'Find link: ' . $domain . ''; 
echo "<b>Status: "; 

//$links is array with all links 
//$domain is domain for example : http://example.com 

for($i = 0;$i<count($links);$i++) 
     { 
      $find_href = preg_match("@[email protected]", $links[$i]['href']); 

      if($find_href) 
      { 

        if($links[$i]['href'] != "") 
        { 
         echo $links[$i]['anchor']; 
         echo 'Link found';' 
        } 
        else 
        { 
         echo 'Link not found'; 
        } 

例:

がドメインを検索します。http://example.com は、URLを検索します。http://www.iana.org

結果:

検索
Link not found 
Link not found 
Link not found 
Link not found 
Link not found 
http://www.iana.org/domains/example 
Link found // find bacouse link is in source code of http://example.com 
Link not found 
Link not found 
Link not found 
Link not found 
Link not found 
Link not found 
Link not found 

ドメイン:http://example.com 検索されたリンク:http://google.com

結果:$ドメインは1時間「のリンクが見つかりません」を印刷する方法$リンク配列を、

Link not found 
Link not found 
Link not found 
Link not found 
Link not found 
Link not found 
Link not found 
Link not found 
Link not found 
Link not found 

で見つからない場合は?

+0

あなたが見つからない場合にループを停止したいんだろう受け取りましたか?または、このメッセージをX回繰り返して印刷するだけですか? –

+0

print_r($リンク)の出力は何か、出力のみを出力する必要があります – Elby

+0

@RiggsFollyご協力ありがとうございました – limakg

答えて

0

は単純に見つからないメッセージを、変数で見つかった条件を登録してから出力あなたが何かを見つけたかどうかに基づいて完了します。コメントに拾い

echo 'Find link: ' . $domain . ''; 
echo "<b>Status: "; 

//$links is array with all links 
//$domain is domain for example : http://example.com 

$found = false; 

for($i = 0;$i<count($links);$i++) { 
    $find_href = preg_match("@[email protected]", $links[$i]['href']); 

    if($find_href) { 

     if($links[$i]['href'] != "") { 
      echo $links[$i]['anchor']; 
      echo 'Link found'; 
      $found = true; 
     } 
    } 
} 
if (!$found) { 
    echo 'Link not found'; 
} 

が、これはより良いコード

echo 'Find link: ' . $domain . ''; 
echo "<b>Status: "; 

//$links is array with all links 
//$domain is domain for example : http://example.com 

$found = false; 

foreach ($links as $link) { 
    $find_href = preg_match("@[email protected]", $link['href']); 

    if($find_href) { 
     if($link['href'] != '') { 
      echo $link['anchor'] . "\nLink found"; 
      $found = true; 
     } 
    } 
} 
if (!$found) { 
    echo 'Link not found'; 
} 
+0

ほんの少しのヒント:forループの前に 'count($ links)その中。この方法では、1回だけでなく数回カウントされます。ちょうど小さなパフォーマンスのもの – DasSaffe

+0

@DasSaffe Yea true。元のコードをあまり変更せずにOPを混乱させたくありませんでした – RiggsFolly

+0

'for'の代わりに' foreach() 'を使う方が良いでしょう。 – Barmar

0

forループは、変数 '$ i'で+1します。変数「$の合計」を作成し、「$リンク」をカウントして、あなただけのdoループのためにある:ループがある後

<!-- above the for loop --> 
$total = count($links); 

<!-- in the for loop --> 
if ($i == $total) { 
    echo 'Link not found'; 
} 
関連する問題