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']}     <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']}     <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
}