$links = array('https://google.com', 'http://aloe.com', 'http://foobar.org/image.jpg');
foreach ($links as $link)
{
$unacceptables = array('https:','.doc','.pdf', '.jpg', '.jpeg', '.gif', '.bmp', '.png');
foreach ($unacceptables as $unacceptable)
{
if (strpos($link, $unacceptable) !== false)
{
echo 'not acceptable!<br />';
}
else
{
echo 'acceptable<br />';
}
}
}
以上应输出:
not acceptable
acceptable
not acceptable
但相反,如果输出这个烂摊子:
not acceptable!
acceptable
acceptable
acceptable
acceptable
acceptable
acceptable
acceptable
acceptable
acceptable
acceptable
acceptable
acceptable
acceptable
acceptable
acceptable
acceptable
acceptable
acceptable
not acceptable!
acceptable
acceptable
acceptable
acceptable
如何让它正常工作?
答案 0 :(得分:1)
因为你在循环中得到循环(这就是为什么它输出8 * 3 = 24次)。 你需要引入一个变量$ is_accepted,在内部循环中设置变量,然后在外部循环内输出答案。
$links = array('https://google.com', 'http://aloe.com', 'http://foobar.org/image.jpg');
foreach ($links as $link)
{
$unacceptables = array('https:','.doc','.pdf', '.jpg', '.jpeg', '.gif', '.bmp', '.png');
$is_accepted = true;
foreach ($unacceptables as $unacceptable)
{
if (strpos($link, $unacceptable) !== false)
{
$is_accepted = false;
}
}
if (!$is_accepted)
{
echo 'not acceptable!<br />';
}
else
{
echo 'acceptable<br />';
}
}
答案 1 :(得分:1)
您希望每个资源只有一个输出,而不是每个资源一个并且不可接受(笛卡尔积!)
试试这个:
$isAcceptable = true;
foreach ( $unacceptables as $unaccetable )
{
if (strpos($link, $unacceptable) !== false)
{
$isAcceptable = false;
break; // not acceptable, no more checks needed
}
}
echo ($isAcceptable ? 'acceptable' : 'not acceptable');
而不是你的foreach循环。
答案 2 :(得分:0)
$links = array('https://google.com', 'http://aloe.com', 'http://foobar.org/image.jpg');
foreach ($links as $link)
{
$unacceptables = array('https:','.doc','.pdf', '.jpg', '.jpeg', '.gif', '.bmp', '.png');
$accept = true;
foreach ($unacceptables as $unacceptable)
{
if (strpos($link, $unacceptable) !== false)
{
$accept = false;
}
}
if ($accept == true) {
echo "Acceptable<br />";
} else {
echo "Not acceptable<br />";
}
}
答案 3 :(得分:0)
这是对代码的更正,同时保留您编写的大部分代码:
$links = array('https://google.com', 'http://aloe.com', 'http://foobar.org/image.jpg');
foreach ($links as $link)
{
$unacceptables = array('https:','.doc','.pdf', '.jpg', '.jpeg', '.gif', '.bmp', '.png');
$link_is_acceptable = true;
foreach ($unacceptables as $unacceptable)
{
if (strpos($link, $unacceptable) !== false){
$link_is_acceptable = false;
break;
}
}
if ($link_is_acceptable)
{
echo 'acceptable<br />';
}
else
{
echo 'not acceptable!<br />';
}
}