混淆使用strpos和!==

时间:2018-04-03 07:14:22

标签: php strpos

困惑! 我正在尝试提取我们的本地人的名字,这些名字嵌入在我们的WordPress网站的结构中,即https://www.website.co.uk/site99/folderX/page。在URL中,localsite名称全部为小写,没有任何间隙,而localsite的“显示名称”具有起始大写和单词之间的间隙。我在这里做错了什么?

if(strpos($_SERVER['REQUEST_URI'], '/site01/') !== false) { $categoryIdOrSlug = 'Site 01';}
elseif (strpos($_SERVER['REQUEST_URI'], '/site02/') !== false) { $categoryIdOrSlug = 'Site 02';}
elseif (strpos($_SERVER['REQUEST_URI'], '/site03/') !== false) { $categoryIdOrSlug = 'Site 03';}
endif;

所以我要找的是/ site99 /位于slug的第0位。

1 个答案:

答案 0 :(得分:-1)

如果你在https://www.website.co.uk/site99/folderX/page

然后:$_SERVER['REQUEST_URI']将为/site99/folderX/page

if (strpos($_SERVER['REQUEST_URI'], '/site98/') !== false) { $categoryIdOrSlug = 'Site 98';} // strpos($_SERVER['REQUEST_URI'], '/site98/') will be false
elseif (strpos($_SERVER['REQUEST_URI'], '/site99/') !== false) { $categoryIdOrSlug = 'Site 99';} // strpos($_SERVER['REQUEST_URI'], '/site98/') will be 0 (which is success run & is true)

查看不同的输出:

echo strpos($_SERVER['REQUEST_URI'], '/site99/'); // OUTPUT: 0

此处,strpos()返回第一个参数(/site99/)中存在第二个参数($_SERVER['REQUEST_URI'])的索引/位置。

strpos()函数在另一个字符串中查找第一次出现的字符串的位置。相关函数:strrpos() - 查找最后一个字符串在另一个字符串中的位置(区分大小写)

var_dump(strpos($_SERVER['REQUEST_URI'], '/site98/'));

输出为bool(false)。为什么是false,因为在参数1中找不到该字符串。如果找到了,那么out将是int的{​​{1}}位置。

int(25)

输出将为var_dump(strpos($_SERVER['REQUEST_URI'], '/site99/')); ,因为int(0)已成功找到strpos()中的/site99/

并且,通常$_SERVER['REQUEST_URI']===用于布尔值(!==)比较。

无需与TRUE/FALSE混淆,strpos()两者完全不同,一个返回位置索引值(如果找到)或!==,如果找不到必需字符串。然而,FALSE比较左和右;运算符和右运算的右侧值说!==TRUE

回复您的评论:

是的,你得到了正确答案。正如您所说,确保我们使用FALSE检查。

您看到我们在if()时收到int(0)。如果我们有一个索引值(甚至是0),则将其视为成功运行(var_dump(strpos($_SERVER['REQUEST_URI'], '/site99/'));)。也就是说,您搜索的字符串位于索引0或true 的特定位置。 $_SERVER['REQUEST_URI']确保检查正确无误,if()表示int(0) !== false成功运行(也称为int(0))。因此,true也可以说是if(int(0) !== false)if(true !== false)&所以true会运行。

$categoryIdOrSlug = 'Site 99';也可以写成:

if()

您无法通过if (strpos($_SERVER['REQUEST_URI'], '/site98/')) { $categoryIdOrSlug = 'Site 98';} elseif (strpos($_SERVER['REQUEST_URI'], '/site99/')) { $categoryIdOrSlug = 'Site 99';} echo $categoryIdOrSlug; // output: Site 99 进行检查,因为我们无法说明=== 0找到搜索字符串的位置,可能会有所不同。