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
             );
}

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。

2014最热门的24个php类库汇总 - 2015-03-30 10:03:17

PHP不仅是一种功能丰富的语言,它还能帮助开发人员轻松地创建更好的网络环境。为了进一步的帮助开发人员,小编将同大家一起分享一些免费并且高质量的PHP类库,希望能够帮助到大家。还在等什么,Let's Go! PhpFastCache PhpFastCache是一个高性能、分布式对象缓存系统,它旨在用于加快动态Web应用程序,以减轻数据库负载。 pchart pchart是一个开源的图表生成库,主要涉及3个Class:pChart.class, pData.class, pCache.class,可生成20多
本文实例讲述了php判断并删除空目录及空子目录的方法。分享给大家供大家参考。具体实现方法如下: 步骤如下: 1.遍历目录及子目录 2.使用 scandir 判断目录是否为空,为空则使用rmdir 删除。 ?php /** 删除所有空目录 * @param String $path 目录路径 */ function rm_empty_dir($path){ if(is_dir($path) ($handle = opendir($path))!==false){ while(($file=readdir($

遭遇php的in_array低性能问题 - 2015-03-30 10:03:04

PHP的性能一直在提高。然而,若是用的不恰当,或是一个不留神,还是可能会踩到PHP内部实现方面的坑的。我在前几天的一个性能问题上就碰到了。 事情是这样子的,一位同事反馈我们的一个接口每次返回需要5秒之久,我们一起review了代码,“惊喜”的发现居然在循环(大约900次)中调用了一个读缓存的操作,而这个缓存的key并没有改变,因此我们把这段代码移到了循环外面,再测,接口返回时间降到了2秒,呜呼!虽然提升了1倍,但明显不是我们能接受的结果! 出现性能问题的代码量并不大,我们排除了IO问题以后,写了一段测试代

PHP入门经历和学习过程分享 - 2015-03-30 09:03:24

经常在某些论坛和QQ群里看到一些朋友会问“怎样才能学好PHP,怎样才能学好***语言 ”,但别人回答最多的是:从最“简单”的开始。 这个简单也许真的不简单,呵呵。下面我想分享一下自己学习的一些过程。先说些费话,语言组织能力差,说了不少费话,愿意看的就看,不要骂我就行。 其实学习一门新语言并不是太难,重要的是你有没有准备好去学好它,时间的长短和个人的能力和决心有关。黑客界也流行一句话就是“没有入侵不了的计算机”,这句话大概的意思是说:如果你的技术比维护这台计算机的管理员更胜一筹,那么就能拿下这台计算机甚至能拿
本文实例讲述了php防止站外远程提交表单的方法,分享给大家供大家参考。具体实现方法如下: 一般来说防止站长提交表单无非就是对每一次打开表单或提交数据都会需要加一个token来进行验证了,这个其实与验证码做法没什么两样了,下面来看几个防止站外远程提交表单的例子。 例子一:我们每一次打开提交页面生成一个token然后保存在session中,当表单提交时我们来判断当前的token值与session是否一致,如果是的就是正常提交否则就是无效提交了。 具体代码如下: 复制代码 代码如下: ?php session_
这个方法同样可以用于判断是否有该分隔符号。例如: 复制代码 代码如下: ?php if($_MODULE[tg1_tjly]){ $tg1_tjly = explode("|",$_MODULE[tg1_tjly]); if(count($tg1_tjly)1){ //重点在这里,统计数组大于1的时候则说明含有1个或以上的间隔符号“|”。 $tg1_tjly_tit = $tg1_tjly[0]; $tg1_tjly_con = $tg1_tjly[1]; }else{ $tg1_tjly_tit = '推
关于支付宝的接口集成气死是很简单,目前大概有3种类型,即时到帐、双功能、担保交易,只需要集成一次担保交易,其他的比如即时到帐集成很容易,担保交易的状态有几种,比如:是否支付成功,卖家是否发货,买家确认收获等。而即时到帐只有一种,就是是否已付款!最多还有个退款的功能。一般都没用到。 通过之前做项目:配资平台,有个预付费的功能,用到了支付宝的双功能收款,其实就是提供两种付款方式,即时到帐和担保交易。一般买家谨慎会选择担保。 下面说下具体的集成过程,第一:下载对应的集成接口包,比如即时到帐就下载即时到帐,担保下
CGI的英文全称为Common Gateway Interface(公共网关接口),是Nginx和动态脚本程序的桥梁,Nginx通过FastCGI接口将动态请求发送给FastCGI,FastCGI中的Wrapper进程生成一个线程,将请求交给脚本解释程序执行,然后通过原来的socket将解释执行后的结果原路返回给Nginx,之后Nginx将结果交给客户端。 Nginx是通过套接字文件socket来将动态请求发送给wrapper,使用的是Tcp协议。wrapper通过CGI接口来接受请求。这样web服务器和

smarty简单分页的实现方法 - 2015-03-30 09:03:09

本文实例讲述了smarty简单分页的实现方法,分享给大家供大家参考。具体实现方法如下: 以下是模板中的smarty代码,用smarty简单的代入相关的变量就行了,非常简单,但是在php代码中还要传入page这个参数。我觉得这样分挺好,非常简单。我越来越喜欢用smarty了。 Php代码如下: 复制代码 代码如下: {if $pageCount 1} {foreach item=i from=$pagerList} {if $pageNum eq $i} {$i} {else} a href ="/spac

探寻PHP脚本不报错的原因 - 2015-03-30 09:03:08

那么如果PHP脚本不报语法错,会是什么原因呢: 1. 一般的集成环境,默认会开启错误报告; 但在linux系统中,使用软件包安装的就不一定了, 此时可以查看PHP配置文件,打开错误报告 = 复制代码 代码如下: display_errors = On /* PHP配置文件路径:/uer/local/php/etc/php.ini */ 注: PHP脚本中动态设置php.ini配置文件的方法 = 复制代码 代码如下: ini_set('display_errors', 'On'); /* 显示所有错误 */