Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我是否正确使用strpos?_Php_String - Fatal编程技术网

Php 我是否正确使用strpos?

Php 我是否正确使用strpos?,php,string,Php,String,我试图确定一个单词是否存在于文本字符串中,然后如果该单词存在,则打印相关字符串。我遇到了一些问题,因为这些代码似乎适用于我的一些用户,但不是所有用户 $active = $db->query("SELECT * FROM activity ORDER BY aTIME DESC LIMIT 15"); while($activity = $db->fetch_row($active)) { $haveact = $activity['activity']; $use

我试图确定一个单词是否存在于文本字符串中,然后如果该单词存在,则打印相关字符串。我遇到了一些问题,因为这些代码似乎适用于我的一些用户,但不是所有用户

$active = $db->query("SELECT * FROM activity ORDER BY aTIME DESC LIMIT 15");

while($activity = $db->fetch_row($active))
{
    $haveact = $activity['activity'];
    $username = $r['username'];
    if(strpos($haveact, $username))
    {
        print " <div class='activitydiv'>   
                {$activity['activity']} &nbsp&nbsp&nbsp&nbsp<small><font color='grey'>
                {$activity['aTIME']}</font></small>
                </div>";
    }
}
$active=$db->query(“按aTIME DESC LIMIT 15从活动订单中选择*);
而($activity=$db->fetch_行($active))
{
$haveact=$activity['activity'];
$username=$r['username'];
if(strpos($haveact,$username))
{
“打印”
{$activity['activity']}
{$activity['aTIME']}
";
}
}

请注意,
strpos
返回找到的文本的位置。例如,当您正在搜索的单词位于字符串的开头时,函数将返回“0”。假设0是一个假值,当您像以前一样使用函数时,即使找到了该单词,它也不会是真的。STRPO的正确用法是:

if (strpos($haystack, $needle) !== false) // Note the type check. 
{ 
    // your code...
}
此外,默认情况下,此函数区分大小写。您可以使用
stripos
进行不区分大小写的搜索

编辑

从手册中:

This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE
检查以下示例以更好地理解:

strpos('the quick brown fox jumps over the lazy dog', 'the'); // Returns 0 (false value)
strpos('the quick brown fox jumps over the lazy dog', 'quick'); // Returns 4 (true value)
strpos('the quick brown fox jumps over the lazy dog', 'THE'); // Returns false (case sensitive)
strpos()
如果未找到指针,则返回布尔值FALSE;以及字符串中其偏移量的整数值(如果找到)。该偏移量可以为0,这在松散比较中等同于布尔值FALSE

使用


strpos有可能返回0和FALSE,它们基本上是相同的“值”

您需要检查类型和值,如


strpos($haveact,$username)!=FALSE

除了其他答案中建议的内容外,我将重新编写整个代码以在查询中执行字符串搜索。例如:

<?php

$active = $db->query("SELECT * FROM (SELECT * FROM activity 
                      ORDER BY aTIME DESC LIMIT 15)
                      WHERE activity LIKE \"%" . $db->escape($r['username']) . "%\";");

while($activity=$db->fetch_row($active))
{
    print "<div class='activitydiv'>
               {$activity['activity']} &nbsp&nbsp&nbsp&nbsp<small><font color='grey'>
               {$activity['aTIME']}</font></small>
           </div>";
}

?>

另一个选项,我通常使用它,因为它较短:)


您也可以尝试php的preg_match函数:

if (preg_match("/{$to_search}/" , $subject)) {
  // your code to process
}

就像Hauke p.提到的-不要用PHP做这件事。您希望筛选与数据库匹配的行。如果您不想使用
WHERE行,比如%foo%
,因为您需要更多的功能,您甚至可以在MYSQL中使用
REGEX
。只是不要用PHP处理数据。如果你这样做,那就是设计失败

查看关于LIKE、SELECT和REGEX的MySQL帮助文件


提示:

这里是STRPO手册->刘易斯,有答案了吗?否则,可能会在“评论”字段中留下反馈。如果你是反对票,请在评论栏中说明原因。但你应该注意,当你知道你在寻找什么时(当你不需要正则表达式的额外功能时),
strpos
会更快。
if (strpos($haveact, $username) !== false) {
    // In string. 
}
if (preg_match("/{$to_search}/" , $subject)) {
  // your code to process
}