PHP字符串之间的比较

/**
 * 字符串的比较
 */
/*
 * 精确比较:
 * 可以用 == 和 === 操作符来比较两个字符串是否相等。
 * 这两个操作符的不同在于它们如何处理费字符串数据类型的操作数。
 * == 操作符把非字符串操作数转换成字符串, 所以 字符串 “3” 和 数字 3 相等
 * === 操作符不进行转换,并且如果参数的数据类型不同就会返回 false
 */

if( 3 == "3"){
    echo "操作符'=='结果   true\n";
}else {
    echo "操作符'=='结果   false\n";
}

if( 3 === "3"){
    echo "操作符'==='结果   true\n";
}else {
    echo "操作符'==='结果   false\n";
}

#
# 当比较操作符的一个参数是数字时,其他参数也将被转换成数字类型。
# 要明确地将两个字符串作为字符串来比较可以在必要的是后先把数字转换成字符串,使用strcmp()函数
# int strcmp ( string $str1 , string $str2 )    //二进制安全字符串比较,即按字典排序
# str1第一个字符串。
# str2第二个字符串。
# 如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。
#

$string = "PHP Rocks";
$number = 5;
if ($string < $number) {
    echo ("{$string} < {$number}")."\n";
}

echo strcmp($string,$number)."\n";
echo strcmp("Hello","hello")."\n";
echo strcmp("Hello","Hello")."\n";
/*
 * 近似相等:
 * PHP提供了一些函数来测试两个字符串是否近似相等
 * string soundex ( string $str )   // 对字符串的soundex值进行计算,
 *                                  // Soundex 值是利用英文字的读音近似值所求得的值,
 *                                  // 值由四个字符构成,第一个字符为英文字母,后三个为数字
 *
 *
 * string metaphone ( string $str [, int $phonemes = 0 ] )  // 对字符串的metaphone值进行计算
 *                                                          //  为发音相似的单词创建相同的键。
 *
 *
 * similar_text()两个字符串的相似程度计算依据
 * Programming Classics: Implementing the World's Best Algorithms by Oliver (ISBN 0-131-00413-1) 的描述进行。
 *  注意该实现没有使用 Oliver 虚拟码中的堆栈,但是却进行了递归调用,这个做法可能会导致整个过程变慢或变快。
 *  也请注意,该算法的复杂度是 O(N**3),N 是最长字符串的长度。
 * int similar_text ( string $first , string $second [, float &$percent ] ) // 计算两个字符串的匹配字符的数目
 *                  // $percent通过引用方式传递第三个参数,similar_text() 将计算相似程度百分数。
 *
 *
 *
 * Levenshtein 距离,又称编辑距离,是指两个字串之间,
 * 通过替换、插入、删除等操作将字符串str1转换成str2所需要操作的最少字符数量。
 * 该算法的复杂度是 O(m*n),其中 n 和 m 分别是str1 和str2的长度
 * (当和算法复杂度为O(max(n,m)**3)的similar_text()相比时,此函数还是相当不错的,尽管仍然很耗时。)。
 *
 * int levenshtein ( string $str1 , string $str2 , int $cost_ins , int $cost_rep , int $cost_del )  // 计算两个字符串之间的编辑距离
 * cost_ins     // 定义插入次数
 * cost_rep     // 定义替换次数
 * cost_del     // 定义删除次数

 */

echo "soundex : ".soundex("Fred")."_".soundex("Phred")."\n";

var_dump(metaphone('programming', 5));
var_dump(metaphone('programming', 6));
var_dump(metaphone('programmer', 5));
var_dump(metaphone('programmer', 6));

echo similar_text("a", "A")."\n";
similar_text("aaa", "Aaa", $percent);
echo "{$percent}\n";

// 以下例子取自PHP手册


$input = 'app'; // 输入拼写错误的单词

$words  = array('apple','pineapple','banana','orange',
    'radish','carrot','pea','bean','potato');   // 要检查的单词数组

$shortest = -1; // 目前没有找到最短距离

// 遍历单词来找到最接近的
foreach ($words as $word) {


    $lev = levenshtein($input, $word);  // 计算输入单词与当前单词的距离

    // 检查完全的匹配
    if ($lev == 0) {

        // 最接近的单词是这个(完全匹配)
        $closest = $word;
        $shortest = 0;

        break;  // 退出循环;我们已经找到一个完全的匹配
    }

    // 如果此次距离比上次找到的要短
    // 或者还没找到接近的单词
    if ($lev <= $shortest || $shortest < 0) {
        // 设置最接近的匹配以及它的最短距离
        $closest  = $word;
        $shortest = $lev;
    }
}

echo "Input word: $input\n";
if ($shortest == 0) {
    echo "Exact match found: $closest\n";
} else {
    echo "Did you mean: $closest?\n";
}

# levenshtein() 函数比 similar_text() 函数更快。不过,similar_text() 函数通过更少的必需修改次数提供更精确的结果。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值