前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP 字符串分割成数组函数explode,str_split 内部实现

PHP 字符串分割成数组函数explode,str_split 内部实现

作者头像
写PHP的老王
发布2019-08-12 15:34:54
1.3K0
发布2019-08-12 15:34:54
举报
文章被收录于专栏:写PHP的老王写PHP的老王

将一个字符串分割成数组在日常开发中的应用应该是很多的。如果指定分割符,可以使用explode,如果没有分割符,可以使用split实现。 那么两个函数内部如何实现,有什么不同呢?

str_split

str_split — 将字符串转换为数组

如果指定了可选的 split_length 参数,返回数组中的每个元素均为一个长度为 split_length 的字符块。

没有split_length参数,每个字符块为单个字符。

如果 split_length 小于 1,返回 FALSE。

如果 split_length 参数超过了 string 超过了字符串 string 的长度,整个字符串将作为数组仅有的一个元素返回。

对于字符串直接按长度切分,一般的做法就是直接遍历字符串,以指定的长度为步长截取子串放入数组中。

首先截取长度进行判断,如果小于1直接返回空。

然后判断需要分割字符串的长度与截取长度关系,如果截取长度大于等于字符串长度,则返回一个只包含一个元素的数组。

那原字符串长度与截取长度确定循环次数。每次循环中截取一个子串添加到数组中。while在没有整除的时候,会遗漏最后一串字符。所以在最后使用一个 if 进行判断。

explode

explode — 使用一个字符串分割另一个字符串

如果设置了 limit 参数并且是正数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含 string 的剩余部分。

如果 limit 参数是负数,则返回除了最后的 -limit 个元素外的所有元素。

如果 limit 是 0,则会被当做 1。

php_memnstr获取字符串在另一个字符串第一次出现的位置。

如果不存在分割字符串,则直接返回包含原字符串组成的数组

通过do循环分别获取分隔符之间的字符串。limit>1保证最后一个数组元素包含字符串剩下部分。

两个函数内部实现异同

str_split 使用 add_next_index_stringl 截取字符添加到数组中。explode使用zend_hash_next_index_insert_new。

内部都是循环截取字符串实现分割字符。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 写PHP的老王 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • str_split
  • explode
  • 两个函数内部实现异同
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档