我正在尝试确定一个单词是否存在于一个文本字符串中,然后如果该单词存在,则打印相关的字符串。我遇到了问题,因为这段代码似乎对我的一些用户起作用,但不是全部用户。
$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']}     <small><font color='grey'>
{$activity['aTIME']}</font></small>
</div>";
}
}
答案 0 :(得分:2)
除了在其他答案中建议的内容之外,我会重新编写整个代码以在查询中执行字符串搜索。例如:
<?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']}     <small><font color='grey'>
{$activity['aTIME']}</font></small>
</div>";
}
?>
答案 1 :(得分:1)
请注意,strpos
会返回找到的文字的位置。因此,例如,当您搜索的单词位于字符串的开头时,该函数将返回“0”。假设0是一个假值,当你使用像你所做的那样的函数时,即使发现了这个单词也不是真的。 strpos的正确用法是:
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)
答案 2 :(得分:0)
像Hauke P.提到的那样 - 不要用PHP做这件事。您希望使用数据库过滤匹配的行。如果您不想使用WHERE row LIKE %foo%
,因为您需要更多功能,甚至可以在MYSQL中使用REGEX
。只是不要用PHP处理数据。如果你这样做,那就是设计失败了。
查看有关LIKE,SELECT和REGEX的MySQL帮助文件。
答案 3 :(得分:-1)
strpos()
返回布尔值FALSE;如果找到,则为字符串中的偏移量的整数值。该偏移量可以为0,在松散比较中等于布尔值为FALSE。
使用
if(strpos($haveact, $username) !== FALSE)
答案 4 :(得分:-1)
strpos有可能返回0和FALSE,它们基本上是相同的“值”
您需要检查类型和值,如
strpos($haveact,$username) !== FALSE
答案 5 :(得分:-1)
另一种选择,我通常使用,因为它更短:)
if (strpos($haveact, $username) !== false) {
// In string.
}
答案 6 :(得分:-1)
作为替代方案,您可以尝试php的preg_match函数:
if (preg_match("/{$to_search}/" , $subject)) {
// your code to process
}