PHP检查如果当前URL在Array中

时间:2016-03-21 11:13:25

标签: php arrays

我正在尝试使用以下代码来检查当前URL是否在数组中。

$reactfulPages = array(
    'url-one',
    'url-two',
    'url-three',
);

if (strpos($url, $reactfulPages) == true) {
    echo "URL is inside list";
}

我认为我设置数组的方式不正确,因为以下代码(检查一个URL)工作正常..

if (strpos($url,'url-one') == true) { // Check if URL contains "landing-page"

}

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:7)

阵列很好,要检查的功能不正确。 strpos()函数用于检查字符串位置。

检查数组中是否有内容的正确方法可以使用in_array()函数。

<?php
$reactfulPages = array(
    'url-one',
    'url-two',
    'url-three',
);

if(in_array($url, $reactfulPages)) {
    echo "The URL is in the array!";
    // Continue
}else{
    echo "The URL doesn't exists in the array.";
}
?>

我希望这对你有用。

答案 1 :(得分:1)

函数strpos()在字符串中查找子字符串,如果找到则返回子字符串的位置。这就是你最后一个例子的原因。

如果要检查数组中是否存在某些内容,则应使用in_array()函数,如下所示:

$reactfulPages = array(
    'url-one',
    'url-two',
    'url-three',
);

if (in_array($url, $reactfulPages) == true) {
    echo "URL is inside list";
}

但是,由于您要对网址进行比较,我假设您要检查网址是否包含数组中的某个字符串,而不一定要将它们作为一个整体进行匹配。 在这种情况下,您需要编写自己的函数,如下所示:

function contains_any($string, $substrings) {
    foreach ($substrings as $match) {
        if (strpos($string, $match) >= 0) {
            // A match has been found, return true
            return true;
        }
    }

    // No match has been found, return false
    return false;
}

然后,您可以将此功能应用于您的示例:

$reactfulPages = array(
    'url-one',
    'url-two',
    'url-three',
);

if (contains_any($url, $reactfulPages)) {
    echo "URL is inside list";
}

希望这有帮助。