mySplit.php
---------------------
<?
/*******************************************
* Copyright : Baby Studio    *
* Email : [email protected]     *
* Author : Yingjie Pan            *
*******************************************/
?>
<?
$vamyarr=mySplit('我是BabyStudio,请多多指教!','2');
foreach($vamyarr as $vsitem)
{
echo($vsitem.'<br/>');
}
function mySplit($vsstr_,$vilen_)
{
$vareturn=array();
$viindex=0;
$vitmp=0;
$vstmp='';
$vicncharaterend=0;
$vscharacter=substr($vsstr_,$viindex,1);
$vsrealcharacter=substr($vsstr_,$viindex,1);
while(strlen($vsrealcharacter))
{
$viindex++;
if(ord($vscharacter)<0 || ord($vscharacter)>127)
{
if($vicncharaterend==0)
{
$vicncharaterend=1;
}
else
{
$vitmp++;
$vicncharaterend=0;
}
}
else
{
$vitmp++;
}
$vstmp=$vstmp.$vscharacter;
if($vitmp==$vilen_)
{
array_push($vareturn,$vstmp);
$vitmp=0;
$vstmp='';
}
if(!strlen(substr($vsstr_,$viindex,1)))
{
array_push($vareturn,$vstmp);
$vitmp=0;
$vstmp='';
break;
}
$vscharacter=substr($vsstr_,$viindex,1);
$vsrealcharacter=substr($vsstr_,$viindex,1);
}
return($vareturn);
}
?>

解决方案 »

  1.   

    <?
    /*******************************************
    * Copyright : Baby Studio    *
    * Email : [email protected]     *
    * Author : Yingjie Pan            *
    *******************************************/
    ?>
    <?
    $vamyarr=BabySplit('我是BabyStudio,请多多指教!','2');
    foreach($vamyarr as $vsitem)
    {
    echo($vsitem.'<br/>');
    }
    function BabySplit($vsstr_,$vilen_)
    {
    $vareturn=array();
    $viindex=0;
    $vitmp=0;
    $vstmp='';
    $vicncharaterend=0;
    $vscharacter=substr($vsstr_,$viindex,1);
    $vsrealcharacter=substr($vsstr_,$viindex,1);
    while(strlen($vsrealcharacter))
    {
    $viindex++;
    if(ord($vscharacter)<0 || ord($vscharacter)>127)
    {
    if($vicncharaterend==0)
    {
    $vicncharaterend=1;
    }
    else
    {
    $vitmp++;
    $vicncharaterend=0;
    }
    }
    else
    {
    $vitmp++;
    }
    $vstmp=$vstmp.$vscharacter;
    if($vitmp==$vilen_)
    {
    array_push($vareturn,$vstmp);
    $vitmp=0;
    $vstmp='';
    }
    if(!strlen(substr($vsstr_,$viindex,1)))
    {
    array_push($vareturn,$vstmp);
    $vitmp=0;
    $vstmp='';
    break;
    }
    $vscharacter=substr($vsstr_,$viindex,1);
    $vsrealcharacter=substr($vsstr_,$viindex,1);
    }
    return($vareturn);
    }
    ?>
      

  2.   

    我看了一下Baby Studio不错,加了注释
    <?
    /********************************************************
    * Copyright : Baby Studio           *
    * Email : [email protected] *
    * Author : Yingjie Pan        *
    *********************************************************/
    $vamyarr=BabySplit('我是BabyStudio,请多多指教!','2');//进行分切// +----------------------------------------------------+
    // | 结果数组显示  |
    foreach($vamyarr as $vsitem)
    {
    echo($vsitem.'<br/>');
    }
    // +----------------------------------------------------+// +----------------------------------------------------+
    // | 分切函数  |
    function BabySplit($vsstr_,$vilen_)
    {
    //$vsstr_为传进来的字符串,即需要进行分切的字符串
    //$vilen_为每个要分成的长度
    $vareturn        = array();//定义要返回的数组
    $viindex         = 0;
    $vitmp           = 0;
    $vstmp           = '';
    $vicncharaterend = 0;
    $vscharacter     = substr($vsstr_, $viindex, 1);//取第一个字符串,即'我'的前半部分
    $vsrealcharacter = substr($vsstr_, $viindex, 1);//取第一个字符串,即'我'的前半部分
    while(strlen($vsrealcharacter))//循环出口
    {
    $viindex++;//依次递加的值

    // +----------------------------------------------------+
    // | $vitmp进行判断性计数 |
    if(ord($vscharacter)<0 || ord($vscharacter)>127)//如果字符的asc码不在0到127之间,执行if内的语句
    {
    if($vicncharaterend == 0)//如果上一个是0,也就是取的这个字符是前半边汉字那么$vitmp不加1
    {
    $vicncharaterend = 1;
    }else{//如果上一个是1,也就是取这个的字符的后半个汉字那么$vitmp加1
    $vitmp++;
    $vicncharaterend = 0;
    }
    }else{
    $vitmp++;
    }
    // +----------------------------------------------------+

    $vstmp = $vstmp.$vscharacter;//$vscharacter依次存贮字符串中的每一个字符,$vstmp进行连接

    // +----------------------------------------------------+
    // | 如果长度等于所给出的长度的话,压入数组 |
    if($vitmp == $vilen_)
    {
    array_push($vareturn,$vstmp);//将$vstmp依次压入数组$vareturn
    $vitmp = 0;
    $vstmp = '';
    }
    // +----------------------------------------------------+

    // +----------------------------------------------------+
    // | 退出 |
    if(!strlen(substr($vsstr_, $viindex, 1)))//如果切完了字符串的话,就退出循环
    {
    array_push($vareturn,$vstmp);//将最后的一个$vstmp放入数组$vareturn
    $vitmp = 0;
    $vstmp = '';
    break;
    }
    // +----------------------------------------------------+ $vscharacter     = substr($vsstr_, $viindex, 1);//依次切字符串的每一个字符
    $vsrealcharacter = substr($vsstr_, $viindex, 1);//依次切字符串的每一个字符
    }
    return($vareturn);//返回结果
    }
    // +----------------------------------------------------+
    ?>
      

  3.   

    copyright只是偶编辑器模板的设置,无伤各位各位引用,呵呵
    /*******************************************
    * Copyright : Baby Studio    *
    * Freeto : Everyone    *
    * Email : [email protected]     *
    * Author : Yingjie Pan            *
    *******************************************/
      

  4.   

    <?
    $vamyarr=(qswhSplit('我是qiushuiwuhen,请多多指教!','3'));
    foreach($vamyarr as $vsitem) echo($vsitem.'<br/>');
    function qswhSplit($str,$len){ 
    preg_match_all("/([\xa0-\xff]?.){{$len}}/",$str,$arr);
    return $arr[0];
    }
    ?>
      

  5.   

    修正一点,因为上面的字数正好是3的倍数,所以改为
    preg_match_all("/([\xa0-\xff]?.){1,{$len}}/",$str,$arr);