// 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
$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
,
请帮助我,我真的很担心。
答案 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 />';
}