您的位置:首页 > 其它

中文截取无乱码、 顺序查找和二分查找函数

2013-08-26 22:40 253 查看
共两种方法,第一种比较全面,第二种方法比较精简(只适合中文和ANSI字符的截取)

第一种,比较全面:

function utf8SubFix($str,$start,$len){

$strlen=strlen($str);

if(!$len||$len<=0||$len<$start){

echo '参数错误';

return false;

}

if($strlen<$len){

$len=$strlen;

}

$offset=0;

$chars=0;

$res='';

while(($chars-$start)!=$len){

$high=decbin(ord(substr($str,$offset,1)));

if(strlen($high)<8){

$count=1;

}else if(strcmp($high & '11100000',11000000)==0){

$count=2;

}else if(strcmp($high & '11110000',11100000)==0){

$count=3;

}else if(strcmp($high&'11111000','11110000')==0){

$count=4;

}else if(strcmp($high&'11111100','11111000')==0){

$count=5;

}else if(strcmp($high&'11111110',11111100)==0){

$count=6;

}else{

echo "default";

echo ($high & '111100000');

echo "<br>";

}

if($start<=$chars){

$res.=substr($str,$offset,$count);

}

$chars+=1;

$offset+=$count;

//echo "<br>".$high;

}

return $res;

}

第二种,比较精简,只适合中文和ANSI字符的截取

function mixSubstr($str, $length, $start=FALSE)

{

$strlen = strlen($str);

if( $length<=0||!$length||($start >= $strlen)){

return false;

}

if($length > $strlen) {

$length = $strlen;

}

$content = '';

$sing = 0;

$count = 0;

//截取开始,中文字符占用3个字,所以从第一个开始依次判断,大于0xa0则开始截取三个字,小于则只截取一个

//只针对中文有效,或者字符占3个字的文字

while($length != ($count-$start))

{

if(ord($str[$sing]) > 0xa0) {

if(!$start || $start <= $count) {

$content .= $str[$sing].$str[$sing+1].$str[$sing+2];

}

$sing += 3;

$count++;

}else{

if(!$start || $start <= $count) {

$content .= $str[$sing];

}

$sing++;

$count++;

}

}

return $content;

}

//顺序查找(数组里查找某个元素)

function seq_sch($array, $n, $k){

$array[$n] = $k;

for($i=0; $i<$n; $i++){

if($array[$i]==$k){

break;

}

}

if ($i<$n){

return $i;

}else{

return -1;

}

}

function binaryfind($arr, $findVal, $lindex, $rindex) {

if ($lindex <= $rindex) {

$mindex = floor(($rindex + $lindex) / 2);

} else {

return -1; //找不到,返回-1

}

if ($findVal == $arr[$mindex]) {

return $mindex;

} else if ($findVal > $arr[$mindex]) {

$lindex = $mindex + 1;

return binaryfind($arr, $findVal, $lindex, $rindex);

} else if ($findVal < $arr[$mindex]) {

$rindex = $mindex - 1;

return binaryfind($arr, $findVal, $lindex, $rindex);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐