explode
来源:互联网 发布:五十音图软件 编辑:程序博客网 时间:2024/05/17 01:58
函数说明
/** * 使用一个字符串分割另一个字符串 * @param string $delimiter * 边界上的分隔字符 * @param string $string * 输入的字符串 * @param int $limit * 如果设置了 limit 参数并且是正数,则返回的数组包含最多 limit 个元素, * 而最后那个元素将包含 string 的剩余部分 * 如果 limit 参数是负数,则返回除了最后的 -limit 个元素外的所有元素 * 如果 limit 是 0,则会被当做 1,返回整个字符串 * @return array | false */explode ( $delimiter, string $string, [, int $limit ] )
实现流程
- 判断参数
$limit
默认为PHP_INT_MAX
- 判断分隔符是否为空,如果为空返回
false
- 判断字符串长度,如果字符串为空且
$limit >= 0
,返回一个包含空字符串的数组;如果字符串长度小于分隔符长度,返回空数组
- 执行逻辑
根据$limit
值执行不同逻辑$limit > 1
if
找不到分隔符,直接返回一个包含整个字符串的数组;else
循环找分隔符,将被分隔的字符串加入数组,跳出循环后,将最后一个字符串加入数组$limit < 0
if
找不到分隔符,返回空数组;else
保存每个字符串的起始位置$positions[]
,以及字符串数目$found
,$toReturn = $limit + $found
,根据$toReturn
以及$positions[]
返回字符串数组$limit == 0 || $limit == 1
返回一个包含整个字符串的数组;
- 判断参数
实现代码
function myExplode($delimiter, $str, $limit = PHP_INT_MAX) { //如果分隔符为空,返回false if ($delimiter == "") { return false; } $arr = array(); //如果字符串为空且 $limit >= 0 返回空字符串数组 if (strlen($str) == 0 && $limit >= 0) { $arr[] = ""; return $arr; } //如果字符串长度<=分隔符长度,返回空数组 if (strlen($str) <= strlen($delimiter)) { return $arr; } if ($limit > 1) { $arr = explodePositive($delimiter, $str, $limit); } elseif ($limit < 0) { $arr = explodeNegative($delimiter, $str, $limit); } else { $arr[] = $str; } return $arr;}function explodePositive($delimiter, $str, $limit) { $start = 0; $arr = array(); if ($pos = strpos($str, $delimiter, $start)) { do { $arr[] = substr($str, $start, $pos - $start); $start = $pos + strlen($delimiter); $pos = strpos($str, $delimiter, $start); } while ($pos && --$limit > 1); // 将末尾的字符串加入数组 $arr[] = substr($str, $start); } else { $arr[] = ""; } return $arr;}function explodeNegative($delimiter, $str, $limit) { $start = 0; $arr = array(); if ($pos = strpos($str, $delimiter, $start)) { do { $posArr[] = $pos; $start = $pos + strlen($delimiter); $pos = strpos($str, $delimiter, $start); } while ($pos); $toReturn = count($posArr) + $limit + 1; $start = 0; for ($i = 0; $i < $toReturn; $i++) { $arr[$i] = substr($str, $start, $posArr[$i] - $start); $start = $posArr[$i] + strlen($delimiter); } } return $arr;}//测试代码$str = "www.sina.com";print_r('explode(\'\', $str)');var_dump(explode('',$str));print_r('myExplode(\'\',$str)');var_dump(myExplode('',$str));print_r('explode($str, \'.\')');var_dump(explode('.',$str));print_r('myExplode($str, \'.\')');var_dump(myExplode('.',$str));print_r('explode($str, \'.\', 1)');var_dump(explode('.', $str, 1));print_r('myExplode($str, \'.\', 1)');var_dump(myExplode('.',$str, 1));print_r('explode($str, \'.\', 2)');var_dump(explode('.',$str, 2));print_r('myExplode($str, \'.\', 2)');var_dump(myExplode('.',$str, 2));print_r('explode($str, \'.\', -2)');var_dump(explode('.',$str, -2));print_r('myExplode($str, \'.\', -2)');var_dump(myExplode('.',$str, -2));print_r('explode($str, \'.\', -3)');var_dump(explode('.',$str, -3));print_r('myExplode($str, \'.\', -3)');var_dump(myExplode('.',$str, -3));print_r('explode($str, \'.\', -4)');var_dump(explode('.',$str, -4));print_r('myExplode($str, \'.\', -4)');var_dump(myExplode('.',$str, -4));
0 0
- explode
- explode
- explode
- explode
- explode函数
- PHP explode
- explode()函数
- 关于explode
- implode 和 explode
- explode()函数使用
- php 函数 implode explode
- implode和explode
- List 与 explode
- PHP implode() 和 explode()
- explode函数的用法
- php explode() 函数
- PHP explode() 函数
- php explode() 函数
- iOS WebView与Native交互
- Rocketmq整体分析
- PhotoShop 快捷键看我就够了
- 自定义ImageView
- 揭秘--组件的概念及应用
- explode
- 剑指offer-面试题28-字符串的排列
- Android填坑之旅(第七篇)Android中解决ImageView长宽比例不一导致填充缩放失真
- VS2013 舒服的字体设置和背景色
- php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
- 项目中向mysql数据库做更新操作报错
- spring使用aop进行读写分离
- Over ? Fighting !
- 设置缓存的大小