对 strpos() 返回值的松散真实比较给出相反的预期结果[重复]

问题描述 投票:0回答:3

我知道带有标签的 $a 变量格式不正确,但这与问题无关。

问题是 strpos 正在数组中每个键的值中查找正斜杠 /,但它没有打印。

$a = '<a target="" href="/test/url">test';
$a_expanded = explode("\"", $a);
echo print_r($a_expanded);
foreach($a_expanded as $num => $aspect) {
  echo $aspect;
  if ($contains_path = strpos($aspect, '/')) {
    echo $a_expanded[$num];
  }
}

它会回显数组和每个方面,但不会回显 strpos 找到时带有正斜杠的字符串。

php foreach strpos
3个回答
2
投票
if ($contains_path = strpos($aspect, '/'))

应该是

$contains_path = strpos($aspect, '/');
if ($contains_path !== false)
当字符串直接以

/

 开头时, 
as strpos 将返回 0 (在你的情况下也是如此)。如果 strpos 没有匹配,则返回 false。

if (0)
if (false)
是一样的。所以这里需要严格比较(
=== or !==
)。


0
投票

找到的字符串位置可能是0,算作 false,需要比较

===

if (false !== $contains_path = strpos($aspect, '/')) {
   echo $a_expanded[$num];
}

0
投票

strpos()
可以返回
FALSE
、0 或非零值。

  • 如果针出现在干草堆的开头,
    strpos()
    返回0。
  • 如果发生在其他地方,则返回大海捞针的相应位置。
  • 如果在大海捞针中没有找到针,
    strpos()
    返回布尔值
    FALSE

我没有检查严格相等,因此

if
语句总是返回错误值,导致我的代码无法工作。

if ($contains_path = strpos($aspect, '/'))

要解决此问题,您可以使用

!==
,它会比较类型 值:

if ($contains_path = (strpos($aspect, '/') !== FALSE))

欲了解更多信息,请查看以下链接:

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.