1

获取链接.html

// all other basic html tags are here which is not need to understand this like(head,body etc)
<a href="website.html">This is the website NO # 1</a>
<a href="http://www.google.com/">This is google site</a>

PHP

<?php
$file = file_get_contents('getlink.html');

$matches = preg_match_all('/<a(?:[^>]*)href=\"([^\"]*)\"(?:[^>]*)>(?:[^<]*)<\/a>/is'
                            ,$file,$match); // work fine
$test1 = preg_match_all('/href=\"((?:https?|ftp)\:\/\/\w+\.[\w-]+\..+)\"/i'
                            ,$file,$test); // work fine

foreach($match[1] as $links) {      

            if ($match[1] == $test[1]){ // write $match[1] not $links
                                        // bcs $links does not work
      echo 'True'.'<br />';
    } else {
     echo 'False'.'<br />';
    }       
                                }

?>

当我运行它时,它会返回false两次,而不是一次false和第二次true

第二个链接应该与$test[1]. 如果我删除第一个链接,它会返回true

请帮帮我,我真的很担心。

4

3 回答 3

0
foreach($match[1] as $links) {      

if ($match[1] == $test[1])

您将其称为 $links 但并未在循环中提及它。

于 2012-04-29T19:28:36.343 回答
0

我只能猜测您提供的信息很少,但我假设您正在寻找任何同时位于$matches和中的链接$test1?如果是这样,这应该是您需要的:

foreach($match[1] as $links)
{      

  if (in_array($links, $test[1]))
  {
    echo 'True<br />';
  }

  else
  {
    echo 'False<br />';
  }       

}

如果确实如此,也许您更愿意使用它需要更少的代码:

echo count($match[1]) == count(array_diff($match[1], $test1)) ? 'False' : 'True';
于 2012-04-29T19:30:34.127 回答
0

A. 你什么都不做$link

B. 如果你跑

var_dump($match[1]);
var_dump($test[1]);

输出

array
  0 => string 'website.html' (length=12)
  1 => string 'http://www.google.com/' (length=22)
array
  0 => string 'http://www.google.com/' (length=22)

你能看到$test [1]不存在吗

C. 你应该做的是使用in_array但会打印多个 True ..

foreach ( $match [1] as $links ) {
    if (in_array ( $links, $test [1] )) {
        echo 'True' . '<br />';
    } else {
        echo 'False' . '<br />';
    }
}

获得真或假使用array_intersect

$result = array_intersect ( $match [1], $test [1] );
if (count ( $result ) > 0) {
    echo 'True' . '<br />';
} else {
    echo 'False' . '<br />';
}
于 2012-04-29T23:03:41.810 回答