如:
$cont = "关于烹饪. 这套厨师类的魔幻小说其实小三已经酝酿很长时间了,但一直都觉得不成熟,就没有下笔.空速即……";
function subpart($cont,10,"utf8"){……}
$array = subpart($cont,10,"utf8");$array = ([0]=>"关于烹饪. ",[1]=>"这套厨师类",[2]=>"的魔幻小说",……);请教,subpart()函数应该怎样写?

解决方案 »

  1.   

    function subpart($cont,$l,$utf)
    {
    $len = mb_strlen($cont, $utf);
    for($i; $i<$len; $i+=$l)
    $arr[] = mb_substr($cont, $i, $l, $utf);
    Return $arr;
    }
    $cont = '中国人民,中国人民银行';
    print_r(subpart($cont, 5, "utf8"));
      

  2.   

    <?php
    $cont = "关于烹饪. 这套厨师类的魔幻小说其实小三已经酝酿很长时间了,但一直都觉得不成熟,就没有下笔.空速即……";$array = subpart($cont,10,"utf8");echo '<pre>';
    print_r($array);function subpart($cont, $len, $charset)
    {
    $contlen = strlen($cont);

    for ($i=0; $i<=$contlen;$i+=$len)
    {
    $contarr[] = substr($cont,$i,$len);
    }
    return $contarr;
    }
    ?>
      

  3.   

    楼上的方法都正确,当然你也可以写正则表达式匹配要分割的字符,比如‘,’‘|’。
    然后用substr装数组
      

  4.   

    我这边没有mbstring库啊,所以,尽量不要用mb_函数,这里先谢过1楼;2楼的方法,解的不完整啊,汉字只用substr()是截不出来的;但是把$contarr[] = substr($cont,$i,$len);中的substr换做可截取utf8汉字的函数就可。但但是,我写的截取函数没有起始位置,相加一时还加不上,不知哪位高手可以解惑一二。function utf8_subString($str,$num) {
    $loop = 0; //循环次数
    //$num = $start + $length;
    $emp = ""; //定义空字符串,拼接每次循环出的单个字符
    for ($i = 0; $i < strlen($str);) {
    $loop ++;
    $string = substr($str, $i, 1); //第一位:字符串,第二位:起始位,第三位:当前字符串的长度
    //echo "ord_string-->>".ord($string)."<br/>";
    //判断每个字符的ASCII码值
    if (ord($string) > 127) {
    $emp = $emp . subStr($str, $i, 3);
    //echo "font1-->>" . $emp . "<br/>";
    $i = $i +3;
    } else {
    $emp = $emp . $string;
    //echo "font2-->>" . $emp . "<br/>";
    $i++;
    }
    //当循环到指定次数时,跳出循环
    if ($loop == $num){
    break;
    }
    }
    //echo "emp-->>" . $emp . "<br/>";
    return $emp;
    }
      

  5.   

    非常感谢以上各楼的帮助,我从别处已经找到了答案:function S($str, $start = 0, $length, $charset = "utf-8", $suffix = true) {
    /*if(function_exists("mb_substr"))
            return mb_substr($str, $start, $length, $charset);
    elseif(function_exists('iconv_substr'))
            return iconv_substr($str,$start,$length,$charset);*/ if (strlen($str) <= $length)
    return $str; $re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
    $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
    $re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
    $re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
    preg_match_all($re[$charset], $str, $match); $slice = join("", array_slice($match[0], $start, $length)); //if($suffix) return $slice; return $slice;
    }
    function a($cont, $n = 0, $subnum) {
    //$len = strlen($cont) / 3;
    for ($i = $n; $i < strlen($cont); $i += $subnum) {
    $res = S($cont, $i, $subnum);
    if(!empty($res)){
    $arrr[] = $res;
    }
    }
    return $arrr;
    }