当从 file() 派生针时,Strpos 永远无法在大海捞针中找到针 [重复]

问题描述 投票:0回答:3
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 查找的名称的另一个数组进行检查,但是它似乎从未检测到该字符串,即使它正在测试以下内容:

ashley.gram20:阿什利<- Does not show found.

很明显应该找到“Ashley.gram20”吧?但它从来没有这样做过?

谢谢!

php string strpos
3个回答
1
投票

解决了!感谢@TML 给了我正确方向的推动,这只是字符串末尾的一些看不见的字符! (不是空格,我已经清理了字符串)。

现在使用:

rtrim($target);

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


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
,您需要将第一个 haystackneedle 作为第二个参数,而不是像您可能所做的那样相反。

当然你可以使用

stripos
代替
strpos
:

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

-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

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