文档章节

PHP实现内部函数explode

刘德生
 刘德生
发布于 2014/06/02 22:35
字数 181
阅读 397
收藏 3

PHPAPI void php_explode(zval *delim, zval *str, zval *return_value, long limit)

{

char *p1, *p2, *endp;


endp = Z_STRVAL_P(str) + Z_STRLEN_P(str);


p1 = Z_STRVAL_P(str);

p2 = php_memnstr(Z_STRVAL_P(str), Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp);


if (p2 == NULL) {

add_next_index_stringl(return_value, p1, Z_STRLEN_P(str), 1);

} else {

do {

add_next_index_stringl(return_value, p1, p2 - p1, 1);

p1 = p2 + Z_STRLEN_P(delim);

} while ((p2 = php_memnstr(p1, Z_STRVAL_P(delim), Z_STRLEN_P(delim), endp)) != NULL &&

--limit > 1);


if (p1 <= endp)

add_next_index_stringl(return_value, p1, endp-p1, 1);

}

}

<?php

function php_explode($delim, $str)

{

if(!$delim){

return false;

}

$delim = strval($delim);

$str = strval($str);

if(!$delim || !$str){

return false;

}

$delim_len = strlen($delim);

$str_len = strlen($str);

if($delim_len > $str_len){

return false;

}

$ret = array();

$check_len = $str_len-$delim_len;

for($p=0,$i=0;$i<=$check_len;){

$tmp = substr($str,$i,$delim_len); 

if(strcasecmp($tmp,$delim)==0){

if($i>$p){

                 $ret[] = substr($str,$p,$i-$p);

}else{

$ret[] = '';

}

$i+=$delim_len;

$p=$i;

}else{

++$i;

}

}

if($p<$i){

$ret[] = substr($str,$p);

}else{

$ret[] = '';

}

return $ret;

}


© 著作权归作者所有

上一篇: curl上传文件
下一篇: PHP 实现短url代码
刘德生
粉丝 6
博文 31
码字总数 7876
作品 0
海淀
高级程序员
私信 提问
[PHP]Only variables should be passed by reference

PHP报错:Only variables should be passed by reference $filename = $FILES[$upload_name]['name']; $fileextension = end(explode('.', $filename)); //ERROR ON THIS LINE 报错原因: 获......

王永濤
2015/11/18
395
0
PHP函数调用及循环体内定义大型变量效率的研究

最近在用php做网站抓取,使用的是CURL。但是数据抓取的效率太低,分析了一下发现:网速问题最大的瓶颈,但这个我无能为力;但是后来我发现,其实除了网速,提高代码内部执行的效率也很重要。...

苗雨顺
2011/01/27
446
0
PHP explode() 函数

定义和用法 explode() 函数把字符串分割为数组。 语法 explode(separator,string,limit) 参数 描述 separator 必需。规定在哪里分割字符串。 string 必需。要分割的字符串。 limit 可选。规定...

Amamatthew
2014/10/10
25
0
那些年坑过我们的php面试题(1)

写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名。 <?php $url = "http://www.baidu.com/a.php?id=1"; $path = parse_url($url); echo pathinfo($path['path'],PATHINFO_EXTE......

shuaiqi
2014/03/19
105
0
ThinkPHP核心框架实现

之前和朋友一块学过够语言,作为系统级别的语言,没有一定的功力和系统编程 经验,很难快速的搭建起来可堪来用的代码块 刚好在公司在用ThinkPHp,这个框架还算是友好,比较灵活。加上PHP的很...

jackdongting
2017/09/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java 8 Optional:优雅地避免 NPE

本篇文章将详细介绍 Optional 类,以及如何用它消除代码中的 null 检查。在开始之前首先来看下什么是 NPE,以及在 Java 8 之前是如何处理 NPE 问题的。 空指针异常(NullPointException,简称...

武培轩
17分钟前
1
0
CountDownLatch实现的并发框架

目录结构 package com.**.**.base.support.executor;import lombok.NoArgsConstructor;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;imp......

MR_TE
18分钟前
7
0
学习记录(day06-事件、按键修饰符、计算属性)

[TOC] 1.1 事件修饰符/按键修饰符 vue 通过事件修饰符对dom事件细节进行控制 <标签 @事件.修饰符="函数"></标签>.prevent ---阻止浏览器默认行为.stop ---阻止浏览器事件冒泡.e...

庭前云落
37分钟前
5
0
006-Sigle-基于blockstack去中心化博客

本篇文章主要讲解有关基于Blockstack的Sigle是一个去中心化的博客项目; 官网地址:https://www.sigle.io/ Github地址:https://github.com/pradel/sigle 页面展示: 介绍: A beautiful de...

Riverzhou
45分钟前
17
0
驰骋工作流引擎开发平台属性功能的隐藏显示介绍

关键字: 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 表单引擎 工作流功能说明 工作流设计 工作流快速开发平台 业务流程管理 bpm工作流系统 java工作流主流框架 自定义...

孟娟
46分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部