foreach循环内部的链接匹配失败

时间:2012-04-29 19:13:40

标签: php foreach

getlink.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

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

3 个答案:

答案 0 :(得分:0)

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

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

你称之为$链接,但没有在你的循环中引用它。

答案 1 :(得分: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';

答案 2 :(得分:0)

一个。 $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]不存在吗

℃。你应该做的是使用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 />';
}