字符串比较;找到'喜欢'字符

时间:2012-04-11 13:37:20

标签: php

我正在对表单进行快速重复检查。比较两个字符串时,我尝试这样的事情:

if (stripos($_SESSION['website'], $f['website']))

我收到此错误:

Fatal error: Call to undefined function: stripos() in...

我不希望它完全匹配,基本上如果$_SESSION['website']是www.google.com,我希望stripos如果true则返回$f['website]是www.goog.com

我做错了什么,或者有更好的方法吗?

编辑:我正在进行一些测试,并注意到我的$_SESSION['website']变量是否包含www.com。和我的$f['website]变量一样。不应该strpos将其视为真实吗?

2 个答案:

答案 0 :(得分:5)

stripos(),根据手册仅存在于PHP 5或更高版本的核心中。如果stripos不存在,那就表明你正在使用PHP 4,这已经过时了。我建议你升级。如果由于某些疯狂的原因你真的不能,你可以在调用strpos之前总是将两个字符串强制为小写,这会产生同样的效果:

<?php
// PHP 5.
$pos = stripos( 'www.google.com', 'google.com' );

// PHP 4.
$pos = strpos( strtolower( 'www.google.com' ), strtolower( 'google.com' ) );

也就是说,您的代码还有更多内容:如果字符串if( stripos( $foo, $bar ) )以字符串$foo开头,那么您正在检查$bar哪个会返回0。您应该使用if( stripos( $foo, $bar ) !== false )来确认。

另一方面:我认为stripos不会帮助你。您提到了www.google.comwww.goog.com,这两个完全不同。后者不是前者的子串,stripos检查子串的起始位置,它不做“松散比较”。

如果你想要“喜欢”并且你有一个数组中的术语,你可能想看一下similar_text()函数,它会告诉你两个不同字符串的相似之处。举个例子:

<?php
$similarity = 0;
similar_text( 'www.goog.com', 'www.google.com', $similarity );
var_dump( $similarity );

上面的代码会将$similarity设置为float(92.307692307692),这是两个字符串的百分比相似度。您可以自然地自行决定相似性的阈值。

答案 1 :(得分:-2)

它的一个strpos('你的字符串或网站名','术语搜索');

如果找到匹配则返回true,否则返回false

$a=strpos($_SESSION['website'], $f['website'])

如果($一个== TRUE)    {

    //do stuff

}    其他     {

    //other stuff
}