strpos()没有按预期工作?

时间:2014-05-08 14:17:20

标签: php foreach strpos

我知道带有标签的$ 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找到时,它不会用正斜杠回显字符串。

3 个答案:

答案 0 :(得分:1)

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

应该是

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

当字符串直接以/开头时,strpos将返回0(就像你的情况一样)。如果strpos没有匹配,则返回false。

if (0)if (false)是相同的。所以你需要在这里进行严格的比较(=== or !==)。

答案 1 :(得分:0)

找到的字符串的位置可能为0,计为false,您需要比较为===

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

答案 2 :(得分:0)

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

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

我没有检查严格的相等性,因此if语句总是返回一个假值,导致我的代码不起作用。

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

要解决此问题,您可以使用!==,它会比较类型的值:

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

有关详细信息,请查看以下链接: