strpos对某个字符串不起作用

4

我想使用strpos函数在一个字符串中查找另一个字符串,但是对于某个特定的字符串却无法正常工作,尽管它对于其他字符串可以正常工作。我做错了什么?

<?php

if (strpos("show me how to dance", "show me")) {
echo "true1";
}
if (strpos("my name is name", "name")) {
echo "true2";
}

?>

结果:

true2

期望结果:

true1true2

4
不可能!你的代码显示了 true2。因为位置 0 的值被解释为 false - AbraCadaver
请在此处输入您要翻译的英文内容。 - user557846
@Dagon 抱歉,那是个打字错误。我想说的是 true2。但我希望能得到 true1 和 true2 两个结果。 - frosty
好的,请阅读下面的说明。 - user557846
1个回答

9
strpos 函数返回字符串中指定内容的位置索引(如果未找到则返回 false)。当该位置索引为 0 时,条件 (strpos("show me how to dance", "show me")) 会被判断为 false(因为在 PHP 中,0 == false 是 true)。为了确保即使在索引为 0 的情况下也能找到指定内容,需要使用严格比较。请注意,不要删除原有的 HTML 标签。
if (strpos("show me how to dance", "show me") !== false)

自从php 8.0版本开始,您可以使用str_contains函数来获得布尔值:
if ( str_contains("show me how to dance", "show me") )

啊...这有点奇怪。默认情况下不应该是开启的吗? - frosty
@frosty:PHP不是一种强类型语言(因此类型转换是隐式的),这有时是一个优点,有时... - Casimir et Hippolyte
1
@frosty 不,strpos不会验证字符串是否包含子字符串,它返回第一次出现的索引,这是两个不同的任务。 - Iłya Bursov
@Lashane 那么有没有一个函数可以验证字符串是否包含子字符串? - frosty
@frosty 我不确定php是否有函数只是为了验证这个(position更通用),不过从语义的角度来看preg_match可能更好。 - Iłya Bursov
@frosty:实际上,strpos 是最好的方式,preg_match 可能有点过头了(除非你想检查单词边界)。 - Casimir et Hippolyte

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接