PHP中比较两个字符串找出第一个不同字符位置例子_php实例

一般的做法就会这样:

复制代码 代码如下:

<?php
for ($offset = 0; $offset < $length; ++$offset) {
    if ($str1[$offset] !== $str2[$offset]) {
        return $offset;
    }
}

而问题下面给出的最佳答案是用异或操作符( ^ ),以前从来没用过这个操作符,也不知道能用到什么地方,今天算是学到。

因为一般情况下,当你对两个字符串进行异或操作的时候,相同的字符的异或结果是null(“\0”),所以我们只要找出第一个非null(“\0”)字符就可以了。

复制代码 代码如下:

<?php
$position = strspn($string1 ^ $string2, "\0");

很明显这是一个更优雅高效的方法。 另外,回答的人还附加了一个多字节字符的解决办法。

复制代码 代码如下:

<?php
function getCharacterOffsetOfDifference($str1, $str2, $encoding = 'UTF-8') {
    return mb_strlen($str1, $encoding)
           - mb_strlen(
                 mb_strcut(
                     $str1,
                     strspn($str1 ^ $str2, "\0"),
                     mb_strlen($str1, '8bit'),
                     $encoding
                 ),
                 $encoding
             );
}

时间: 2024-10-18 18:05:26

PHP中比较两个字符串找出第一个不同字符位置例子_php实例的相关文章

PHP中比较两个字符串找出第一个不同字符位置例子

 这是一个在stackoverflow上的问题. 给出两个长度相等的字符串,找出这两个字符串中第一个不同的字符位置. 一般的做法就会这样:    代码如下: <?php for ($offset = 0; $offset < $length; ++$offset) {     if ($str1[$offset] !== $str2[$offset]) {         return $offset;     } } 而问题下面给出的最佳答案是用异或操作符( ^ ),以前从来没用过这个操作符

JS实现为排序好的字符串找出重复行的方法_javascript技巧

本文实例讲述了JS实现为排序好的字符串找出重复行的方法.分享给大家供大家参考,具体如下: 实现这样一个需求,在一个Editplus文档中,有很多行10位的数字,这些数字已经排好序了. 比如: 1234567890 1234567891 1234567892 1234534124 1234614124 4321412414 5636373573 有什么办法能方便的找出两行至少前7位相同的数字吗? 比如,上面的数字中,能够找出 1234567890 1234567891 1234567892 <!D

oc ios-oc中如何截取特定字符串中某两串字符串之间的字符串

问题描述 oc中如何截取特定字符串中某两串字符串之间的字符串 譬如{"name":"lxy","type":"学生","id":86,"psw":"123","nickName":"lxy","telephone":null,"email":null,"top":nul

JAVA中获取两个字符串差异的方法

问题描述 JAVA中获取两个字符串差异的方法 求助,在编程的过程中碰到这样一个问题,有两个String字符串,然后我需要获取他们之间的差异 String s = {"12345"}; String s1 ={"123645"}; 其中这两个数组的长度可变,s是模板,所有的数组都要和这个数组比较,然后把差异的部分获取出来 所以s1可以是缺了一两个元素的数组,仅仅是单个的字符被替换了,这个可以简单的用字符数组一个一个比较获得,但是如果多一个,或者少一个,这一块我就有点不

判断单链是否循环,并且找出第一个循环节点

介绍     判断单链是否循环,并且找出第一个循环节点. 思路     [判断单链是否循环]:如果单链是循环的,那么循环部分就是封闭的.这好比一个田径运动场,当两个人跑步时,开始虽然有一定的间距,但他们迟早会相遇的. 顺其自然的我们从中抽取一个数学模型,一个是步长Steps(对应两人刚开始跑步时的间距):一个是判断单链循环的条件nodeX==nodeY(两人"相遇").     [找出第一个循环节点]:我想过好多其它方法,实现起来都比较难,后来出去骑行了两个小时,回来后就想到借助Has

在C语言中比较两个字符串是否相等的方法_C 语言

C语言strcmp()函数:比较字符串(区分大小写) 头文件:#include <string.h> strcmp() 用来比较字符串(区分大小写),其原型为: int strcmp(const char *s1, const char *s2); [参数]s1, s2 为需要比较的两个字符串. 字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值.strcmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,若差值不为0 则将差值返回.例

Yii框架中 find findAll 查找出制定的字段的方法对比_php实例

众所周知 modelName::model() -> find() //找出的是一个对象 modelName::model() -> findALL() //找出的是一个对象集合的数组 如何找出我所需要的字段的数据,而不是全部字段的数据 之前我是这么做的 $criteria = new CDbCriteria; $criteria->select = 'username,id,email'; $criteria->order = 'id DESC'; $users = modelN

php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析_php实例

示例代码,用到了函数substr与iconv_substr,mb_substr 复制代码 代码如下: <html><head><meta charset='utf-8'><title>截取中文字符串__www.jb51.net</title></head><body><?php$str='123456欢迎大家的光临';echo substr($str,0,4);echo '<br>';echo iconv

JavaScript中判断两个字符串是否相等的方法_基础知识

先将用户的输入值全部转换为大写(或小写),然后再行比较: var name = document.form1.txtUserName.value.toLowerCase(); if(name == "urname") { // statements go here. }       JavaScript有两种相等运算符.一种是完全向后兼容的,标准的"==",如果两个操作数类型不一致,它会在某些时候自动对操作数进行类型转换,考虑下面的赋值语句: var strA =