php startswith,3分钟短文 | 伸手党有福了,PHP也能用上startsWith,endsWith 了

引言

写程序的时候经常会遇到这样的需求,判断某个字符串是否以某个子字符串开头或者结尾?一般你是怎么做的呢?每次都要手动写 substr 匹配?或者正则验证?是不是太麻烦了,就封装成 helper 函数。

07b41123e3efa29442f2d6d510feee75.png

这有点太 PHP 了,不行就来个函数。能不能优雅一些呢?本文就带你来看看。

学习时间

我们也先来造个轮子,看看其中一种的实现方法。先实现 startsWith 函数:

function startsWith($haystack, $needle)

{

$length = strlen($needle);

return (substr($haystack, 0, $length) === $needle);

}

接着是 endsWith 函数:

function endsWith($haystack, $needle)

{

$length = strlen($needle);

if ($length == 0) {

return true;

}

return (substr($haystack, -$length) === $needle);

}

原理都非常简单,除了字符串长度的验证,非法数据的验证。核心使用 substr 进行函数切割。切割长度就是子字符串的长度。如果完全相同,就是 true。

引申方法

我们说条条大道通罗马,php 实现功能也不仅仅一个办法。下面是使用内置函数 substr_compare 实现。该函数是二进制安全比较字符串,从偏移位置比较指定长度。具体形参就不具体贴出来了,大家看看手册,对比一下该函数的返回值。

下面直接贴代码。先是 startsWith 函数:

function startsWith($haystack, $needle) {

return substr_compare($haystack, $needle, 0, strlen($needle)) === 0;

}

然后是 endsWith 函数:

function endsWith($haystack, $needle) {

return substr_compare($haystack, $needle, -strlen($needle)) === 0;

}

是不是精简许多。一行代码实现,容错性还非常好。简直是NB!

优秀的框架

Laravel 5 为我们提供的 Str 类,也含有了 startsWith endsWith 方法。我们贴出来供大家对比:

8abf7cd9e3169e2128cf4d232787e30f.png

我们看到,该方法第二个参数接受 string | array 数据,可以多个匹配。而且在数据类型上也做了强制转换,使得错误率更低,指向更明确。

60234b87352d456f2ff3e8b81e6535e2.png

写在最后

本文展示了 PHP 如何使用内置函数实现 startsWith / endsWith 方法。提供了 3 种方法,大家对比研究一下,哪种写法更健壮。

Haapy coding :_)

我是@程序员小助手,持续分享编程知识,欢迎关注。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值