2014-05-08 173 views
0

我知道$ tag变量的格式不正确,但这与问题无关。strpos()不按预期工作?

问题是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找到正斜线时回显字符串。

+0

explode(“\”“,$ a); ?不爆炸(“\”,$ a); ? –

+1

因为你在'if'语句中做了一个赋值。你需要这个:'if($ contains_path =(strpos($ aspect,'/')!== FALSE)){' –

+0

@AmalMurali它应该仍然返回TRUE,不是? – CR47

回答

0

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

  • 如果发生在草堆的开始针,strpos()返回0
  • 如果别处发生时,它返回大海捞针的相应位置。
  • 如果在干草堆中找不到针,strpos()返回布尔值FALSE

我没有检查严格的等号,所以if语句总是返回falsey值,导致我的代码无法工作。

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

要解决这个问题,你可以使用!==,其中比较类型值:

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

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

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

应该

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

为strpos将返回0,当字符串直接与/开始(因为它,你的情况)。如果strpos不匹配,则返回false。

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

+0

'strpos()'永不返回NULL。 –

+0

@AmalMurali我已经在编辑我的答案,对不起:) –

0

找到字符串的位置可能是0,这被计为假的,你需要比较的===

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