注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

早衰男的巢

大音希声 道隐无名

 
 
 

日志

 
 

PHP: 判断是否以特定字符串为结尾  

2014-01-12 19:00:51|  分类: PHP |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

要在线整理一些文件,直接在shell下担心操作失手..于是写成了脚本,主要目的…下面的备注有标了,其实就是判断一些文件名后缀,找出判断是否匹配

例如判断一个 文件 是不是 “.txt”后缀这样

?

  1: /**
  2:  * endwith()
  3:  * 判断是否以特定的字符串结束,查找文件后缀用
  4:  * @param string $haystack
  5:  * @param string $needle
  6:  * @return boolean $result
  7:  */
  8: function endwith($haystack,$needle){
  9:     if(!$needle) return false;
 10:     $nlen = strlen($needle);
 11:     $strend = substr($haystack,-$nlen);
 12:     return ($strend==$needle)?true:false;
 13: }

好蛋疼…写完才发现,其实有现成的函数

string strrchr ( string haystack, string needle )

?

如果要判断 $filename 是不是 txt,只要

  1: if(strrchr($filename,”.txt”)==”.txt”){
  2:   …
  3:  }

?

备忘注意事项:

“./”和 “../”要注意忽略,否则陷入死循环;

$filename 匹配时注意大小写敏感的问题,最好做 strtolower() 处理




***** 20140728 *******

重要的奇怪发现...

我不知道是我对手册里 strrchr() 的理解有问题,还是这个函数的用法不正确还是真的存在bug

strrchr( string haystack, string needle )
函数说明是这样的,查找 haystack中 needle最后一次出现的位置,并返回以此为开头剩余的部分。
这里还有一个有趣的说明,参数二 needle不但可以输入一个String而且当输入int时,可以当做对应的ASCII 相当于 chr(int needle)。
我以为needle是进行字符串匹配的,这是错的!函数名暴露一个事实是参数二识别的仅仅是字符,当你输入一个字符串,只会提取第一个字节作为 needle去匹配查找的对象!
例如: 
$extname =  strrchr( "abd.dat", ".txt"); 
print_r($extname); //false ? null ? 错! 是 “.dat ” ,因为匹配条件“.txt”等同于"." 。

不过...话说回来,上面的例子
if(strrchr($filename,”.txt”)==”.txt”){} //也是没有错的。呵呵
  评论这张
 
阅读(3931)| 评论(3)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018