当前位置: 首页 > news >正文

【PHP】函数explode和split的区别

前言

之所以做这个,是因为这两个函数的作用很像,都是把字符串转换成数组。

explode

从下面的例子可以看出,生成的数组是有对应的顺序的。

$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2

// 示例 2
$data = "foo:*:1023:1000::/home/foo:/bin/sh";
list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
echo $user; // foo
echo $pass; // *

注意的是,如果第一个参数为空字符串的话,就会产生Warning。

var_dump( explode('','asdasd') );

//Warning: explode(): Empty delimiter in /tmp/e80c9663-e392-4f81-8347-35726052678f/code on line 3
//bool(false)

split

(PHP 4, PHP 5)
split — 用正则表达式将字符串分割到数组中

注意的是上面并没有PHP 7,也就是说split函数并不支持PHP 7.

$date = "04/30/1973";
list($month, $day, $year) = split ('[/.-]', $date);
echo "Month: $month; Day: $day; Year: $year<br />\n";

//PHP 7 下的报错
Fatal error: Uncaught Error: Call to undefined function split() in /tmp/4d38c290-b4cb-43f5-846a-9fa90784a090/code:4
Stack trace:
#0 {main}
  thrown in /tmp/4d38c290-b4cb-43f5-846a-9fa90784a090/code on line 4

//PHP 5.6 下返回正常
Month: 04; Day: 30; Year: 1973

split的第一个参数为正则表达式,也就是说,如果想要匹配特殊字符,需要转义一下。

$arr='2016\8\11';
$rearr = split ('[/\]', $arr);
var_dump($rearr)

/*
array(3) {
  [0]=>
  string(4) "2016"
  [1]=>
  string(1) "8"
  [2]=>
  string(2) "11"
}
*/

也正是因为要使用正则表达式 pattern 的语法,所以搜索的速度不会很快。

preg_split() 函数使用了 Perl 兼容正则表达式语法,通常是比 split() 更快的替代方案。如果不需要正则表达式的威力,则使用 explode() 更快,这样就不会招致正则表达式引擎的浪费

可能效率的原因导致了PHP 7 中直接放弃了这个函数吧。

参考资料

  • http://php.net/manual/zh/function.explode.php
  • http://php.net/manual/zh/function.split.php

相关文章:

  • IIS下配置PHP
  • OGNL表达式介绍
  • CSS——NO.8(代码简写)
  • Sqli-labs less 10
  • Crontab创建定时任务
  • 使用maven进行测试设置断点调试的方法
  • Oracle 11gR2 RAC 常用维护操作 说明
  • 分布式任务队列Celery
  • POJ1323 Game Prediction(贪心)
  • 过滤squidlog中各个链接的大小
  • 我的Java后端书架 (2016年暮春3.0版)
  • linux常用命令简介
  • 云平台统计人员在线数的办法
  • Timesten常用命令
  • 后台dubug有值且sql也打印出来执行了但是前台就是查不到数据
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • Android Studio:GIT提交项目到远程仓库
  • angular2开源库收集
  • Angularjs之国际化
  • docker python 配置
  • mongo索引构建
  • npx命令介绍
  • rc-form之最单纯情况
  • React-flux杂记
  • SSH 免密登录
  • vue总结
  • 扑朔迷离的属性和特性【彻底弄清】
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何编写一个可升级的智能合约
  • 如何设计一个微型分布式架构?
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 微信小程序:实现悬浮返回和分享按钮
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 湖北分布式智能数据采集方法有哪些?
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (LeetCode C++)盛最多水的容器
  • (二)fiber的基本认识
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (三)elasticsearch 源码之启动流程分析
  • (三十五)大数据实战——Superset可视化平台搭建
  • (状压dp)uva 10817 Headmaster's Headache
  • .FileZilla的使用和主动模式被动模式介绍
  • .net mvc 获取url中controller和action
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .net和php怎么连接,php和apache之间如何连接
  • .NET文档生成工具ADB使用图文教程
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .NET中GET与SET的用法
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • [ 数据结构 - C++] AVL树原理及实现