Strpos在干草堆中永远找不到针? (使用!==)

时间:2014-10-03 20:19:03

标签: php string strpos

for($i = 0; $i < 60; $i++)
{
    foreach($lines as $line_num => $line)
    {   
        if(strpos(strtolower($items[$i]['username']), strtolower($line)) !== false)
        {
            var_dump("found");
        }   
    }
}

我在$ items数组中有60个名字,对于每个名称我都要在另一个包含姓名的数组中检查它,而不是使用strpos查找,但是它似乎从未检测到字符串,即使它&# 39;测试以下内容:

ashley.gram20:ashley&lt; - 找不到。

很明显应该找到&#39; Ashley.gram20&#39;一定?但它永远不会吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

解决!感谢@TML让我在正确的方向上轻推,只是字符串末尾的一些隐形字符! (不是空间,我已经清理了它的字符串。)

现在使用:

rtrim($target);

虽然会从字符串中修剪所有空格和非标准字符,但您知道的越多!

答案 1 :(得分:0)

我的猜测是你应该使用以下代码:

for($i = 0; $i < 60; $i++)
{
    foreach($lines as $line_num => $line)
    {   
        if(strpos(strtolower($line), strtolower($items[$i]['username'])) !== false)
        {
            var_dump("found");
        }   
    }
}

对于strpos,您需要将第一个 haystack needle 作为第二个参数,而不是像您可能的那样。

当然,您可以使用stripos代替strpos

for($i = 0; $i < 60; $i++)
{
    foreach($lines as $line_num => $line)
    {   
        if(stripos(line, $items[$i]['username']) !== false)
        {
            var_dump("found");
        }   
    }
}

答案 2 :(得分:-1)

你几乎把它弄好了,但你忘记了一个foreach,所以 $ line 仍然是一个数组,而不是一个字符串。

<?php

$lines = array(array('Test','Monk','donky.monster'));

$items = array(array('username' => 'donky'),array('username' => 'Test'));

foreach($items as $item)
{
    foreach($lines as $line_num => $line)
    {
      foreach($line as $name){
        if(strpos(strtolower($item['username']), strtolower($name)) !== false)
        {
            var_dump("found");
        }
      }
    }
}
?>

演示:https://eval.in/201652