php中升级的explode

explode在php中的功能是将字符串按照特定分隔符分开,然后放入数组中。经常使用这个函数的同学可能会发现当字符串中含有不想分隔的分隔符的时候 比如“name|pass” 这样按“|”分隔是不会存在问题的,但是如果这样“myuser|pass|123” 这样pass和123也会被分隔开,今天工作的时候遇到了这个问题,因此写了一段代码,来搞定这个。

举个例子,现在有字符串 $s = ''myinfo|myname|mypass|12|3|456|789'';
 
其中12|3是不想被分开的整体,可以这样来搞定:
 
$rs = adv_explode($s,''|'',3,2); 意思是把$s作为要分隔的字符串,分隔符是|,前面保留3个,后面保留2个进行分隔。呵呵,没有做参数检测,需要的同学可以自己加上哦~代码其实很简单,完全是为了方便大家~
PHP代码
/**
  * adv_explode 按要求对字符串进行分隔
  *
  * 详细描述
  * @param string $str 要分隔的字符串
  * @param string $split 分隔符
  * @param int $a 前端正常分隔的元素个数
  * @param int $b 后端正常分隔的元素个数
  * @return array
  */

function adv_explode($arr,$split,$a,$b)
{
 $arr = explode($split,$arr);
 $k = 0;
 for($i=0;$i  {
  if($i<=$a-1)
  {
   $re[$i] = $arr[$i];
  }
  else if($i>=count($arr)-$b)
  {

   $j = $i-(count($arr)-$a-$b-1);
   $re[$j] = $arr[$i];
   unset($j);
  }
  else
  {
   $tmp[$k] = $arr[$i];
   $k++;
  }
 }
 if($k>1)
 {
  $re[$a] = implode($split,$tmp);
 }
 else
 {
  $re[$a] = $tmp[0];
 }
 return $re;
}