php原生代码实现explode函数功能
在开始代码前要先介绍几个PHP函数:
explode() 把字符串打散成数组
strpos() 返回字符串在另一个字符串第一次出现的位置(对大小写敏感)
strstr() 查找字符串在另一个字符串的位置,并返回剩余部分(对大小写敏感)
substr() 返回字符串的一部分
好了,废话不多说,直接上代码:
function explodes($string, $exp = ',')
{
if ( !is_string($string) )
{
return false;
} $array = array(); while(true)
{
if ( !strstr($string, $exp) && !empty($string) )
{
$array[] = $string;
break;
} $str = strstr($string, $exp);
$num = strpos($string, $exp); if ( $num )
{
$array[] = substr($string, 0, $num);
} $str = trim($str, $exp); if ( !$str ) break; $string = $str; }
return $array;
} 经过测试,发现了一个问题,当字符串中出现连续的分割字符的时候,上面的函数和explode输出的结果有差别. 字符串: $string = "asd,asd,asd,asd,asd,asd,,,,"; 自定义函数explodes的输出结果:
array(8) {
[0]=>
string(4) "asdf"
[1]=>
string(2) "sd"
[2]=>
string(3) "asd"
[3]=>
string(3) "asd"
[4]=>
string(3) "asd"
[5]=>
string(3) "sda"
[6]=>
string(3) "asd"
[7]=>
string(3) "asd"
}
而调用PHP内置字符串函数explode的结果却是:
array(13) {
[0]=>
string(4) "asdf"
[1]=>
string(2) "sd"
[2]=>
string(3) "asd"
[3]=>
string(3) "asd"
[4]=>
string(3) "asd"
[5]=>
string(3) "sda"
[6]=>
string(3) "asd"
[7]=>
string(3) "asd"
[8]=>
string(0) ""
[9]=>
string(0) ""
[10]=>
string(0) ""
[11]=>
string(0) ""
[12]=>
string(0) ""
}
很明显的一个bug,正在着手解决,但没有思路,请教各位大神是没有什么好的办法
php原生代码实现explode函数功能的更多相关文章
- 模拟实现兼容低版本IE浏览器的原生bind()函数功能
模拟实现兼容低版本IE浏览器的原生bind()函数功能: 代码如下: if(!Function.prototype.bind){ Function.prototype.bind=function( ...
- 原生JS实现购物车结算功能代码+zepto版
html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- 原生JS封装_new函数,实现new关键字的功能
1.前言 众所周知:没有对象怎么办?那就new一个! 那么在JS中,当我们new一个对象的时候,这个new关键字内部都干了什么呢? 现在我们就来剖析一下原生JS中new关键字内部的工作原理. 2.原生 ...
- js原生代码实现轮播图案例
一.轮播图是现在网站网页上最常见的效果之一,对于轮播图的功能,要求不同,效果也不同! 我们见过很多通过不同的方式,实现这一效果,但是有很多比较麻烦,而且不容易理解,兼容性也不好. 在这里分享一下,用j ...
- Cordova - 与iOS原生代码交互2(使用Swift开发Cordova的自定义插件)
在前一篇文章中我介绍了如何通过 js 与原生代码进行交互(Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)),当时是直接对Cordova生成的iOS工程项目进行编辑操作的(添加 ...
- Android NDK开发篇(六):Java与原生代码通信(异常处理)
一.捕获异常 异常处理是Java中的功能.在Android中使用SDK进行开发的时候常常要用到.Android原生代码在运行过程中假设遇到错误,须要检測,并抛出异常给Java层.运行原生代码出现了问题 ...
- JavaScript调用App原生代码(iOS、Android)通用解决方案
实际场景 场景:现在有一个H5活动页面,上面有一个登陆按钮,要求点击登陆按钮以后,唤出App内部的登录界面,当登录成功以后将用户的手机号返回给H5页面,显示出来.这个场景应该算是比较完整的一次H5中的 ...
- Android NDK开发篇(四):Java与原生代码通信(原生方法声明与定义与数据类型)
Java与原生代码通信涉及到原生方法声明与定义.数据类型.引用数据类型操作.NIO操作.訪问域.异常处理.原生线程 1.原生方法声明与定义 关于原生方法的声明与定义在上一篇已经讲一点了,这次具体分析一 ...
- 使用JNA,让java调用原生代码
JNA定义: JNA:java Native Access,是SUN公司开发的基于JNI的框架.JNI使得Java可以调用原生的c或者c++代码. JNA与JNI(Java Native Interf ...
随机推荐
- margin-塌陷问题
塌陷问题 当两个盒子在垂直方向上设置margin值时,会出现一个有趣的塌陷现象. ①垂直并列(少见) 首先设置两个DIV,并为其制定宽高 /*HTML部分*/ <body> <div ...
- Android 自定义控件 轻松实现360软件详情页
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43649913,本文出自:[张鸿洋的博客] 1.概述 最近有不少朋友私聊问应用宝. ...
- Java 读书笔记 (一) 基本知识
1. 基本概念 对象 对象是类的一个实例,有状态和行为. 例如,一条狗是一个对象,它的状态有:颜色.名字.品种:行为有: 摇尾.叫.吃等. 类 类是一个模板,它描述一类对象的行为和状态. 方法 方法就 ...
- jackson xml转对象 对象转xml
public static void main(String[] args) throws Exception { XnServiceGetUserRequest xnServiceGetUserRe ...
- Python实现微信消息防撤回
微信(WeChat)是腾讯公司于2011年1月21日推出的一款社交软件,8年时间微信做到日活10亿,日消息量450亿.在此期间微信也推出了不少的功能如:“摇一摇”.“漂流瓶”.“朋友圈”.“附近的人” ...
- Vue中引入bootstrap导致的CSS问题
最近在进行vue.js+webpack进行模块化开发的时候,遇到一个奇怪的问题. 问题是这样的: 1. 在main.js文件中引入bootstrap的js和css. 2. 自己写了一个Header.v ...
- 网页的cdn引用地址,js,react,bootstrap
react+----这三个够用了 <script src="https://cdn.bootcss.com/react/15.4.2/react.min.js">< ...
- 初探机器学习之使用百度AI服务实现图片识别与相似图片
一.百度云AI服务 最近在调研一些云服务平台的AI(人工智能)服务,了解了一下阿里云.腾讯云和百度云.其中,百度云提供了图像识别及图像搜索,而且还细分地提供了相似图片这项服务,比较符合我的需求,且百度 ...
- Kubernetes集群部署史上最详细(二)Prometheus监控Kubernetes集群
使用Prometheus监控Kubernetes集群 监控方面Grafana采用YUM安装通过服务形式运行,部署在Master上,而Prometheus则通过POD运行,Grafana通过使用Prom ...
- ajax分页借鉴
大家好这是我分页是用的代码希望大家可以相互交流ajax局部刷新 var pageindex = 1; var where = ""; var Pname = "" ...