php字符串函数相关试题场景
// 1、将1234567890转换成1,234,567,890 每3位用逗号隔开的形式。 $sss = "1234567890"; // 1,234,567,890; $str = "1234567890xx"; // 函数1; function strrevchunk($str){ return strrev(trim(chunk_split(strrev($str),3,","),",")); } // 函数2; function arr($str){ return strrev(implode(",",str_split(strrev($str),3))); } //函数3: function zixie($str){ $length = strlen($str); $revstr = strrev($str); $resrev = ""; for($i = 0;$i<$length;$i++){ $resrev .= substr($revstr,$i,1); if($i%3==2){ $resrev .= ","; } } return trim(strrev($resrev),","); } //函数4; function push($str){ $length = strlen($str); //$revstr = strrev($str); $arrsplit = str_split($str); $newarr = array(); for($i = 0;$i<$length;$i++){ array_unshift($newarr,array_pop($arrsplit)); if($i%3==2){ array_unshift($newarr,","); } } return trim(implode($newarr),","); } //函数5: function numberformat($str){ return number_format($str); // 注意1:此函数,只对数字有效,非数字字符之后的所有字符会省略; // 注意2:此函数可有1个参数(省去小数点),2个参数(小数点保留位数),4个参数(小数点标记表示形式,千分位标记表示形式); } //函数6: function arrsplice($str){ $length = strlen($str); // 原始字符串长度; $biaojishu = floor($length/3); //需要在字符串中插入、添加的字符标记个数(每三字符后添加一个字符); $zongchang = $length + $biaojishu; // 在原始字符串中插入字符后,得到最后的字符串总长度; $strrev = strrev($str); // 先将字符串反转; $strtoarr = str_split($strrev); // 将字符串中每个字符(字节)分割成数组; for($i = 0;$i<$zongchang;$i++){ array_splice($strtoarr,$i,0); // 没有新的内容对截取的内容进行修改,保持原数组样式; if(($i%4 ==3)&&($i!=$zongchang-1)){ //每三个字符后,插入一个字符,新插入字符的位置在4个中最后一位;(3,7,11...从0开始标记的); 如果是末尾的标记则省略(如:123,456,则只需要123,456); array_splice($strtoarr,$i,0,","); // 在此位置插入","(标记)字符; } } return strrev(implode($strtoarr)); }
// 使用五种以上方式获取一个文件的扩展名; //要求:dir/upload.image.jpg,找出 .jpg 或者 jpg , $filestr = "dir/upload.image.jpg"; //函数1; function strposstr($filestr){ return substr($filestr,strrpos($filestr,".")); } // 函数2; function strrchrstr($filestr){ return strrchr($filestr,"."); } // 函数3; function strstrtuue($filestr){ return strrev(strstr(strrev($filestr),".",TRUE)); } // 函数4; function strayy($filestr){ return end(explode(".",$filestr)); // 同 array_pop(explode(".",$filestr)); //使用数组最后一个元素,还可以用count()-1 // $arr = (explode(".",$filestr)); // return $arr[count($arr)-1]; } // 函数5; function strtokarr($filestr){ $tokarr = array(); $tok = strtok($filestr,"."); while($tok !== false){ $tokarr[] = $tok; $tok = strtok("."); } return $tokarr[count($tokarr)-1]; } // 函数6; function strsplit($filestr){ $strrev = strrev($filestr); $weizhi = strpos($strrev,"."); $arr = str_split($strrev,$weizhi); return strrev($arr[0]); } // 函数7; function strposoffset($filestr){ $count = substr_count($filestr,"."); // 得出"."在字符串中出现了几次; $lens = strlen("."); // 得出"."(子字符串)的长度; for($i =0;$i<$count;$i++){ $weizhi = strpos($filestr,"."); // 逐个找出"."在字符串中的位置; $statr = $weizhi + $lens; // 子字符串的起始位置; $filestr = substr($filestr,$statr); // 除去第一个标记(".")后的子字符串; } return $filestr; } // 函数8; // 思路和函数7类似,都是通过循环,找到"."的位置,然后截取(舍去前一个点的部分),利用子字符串再次查找截取; function possubstr($filestr){ $sublen = strlen("."); // "."(子字符串)的长度; while(strpos($filestr,".")!==false){ $weizhi = strpos($filestr,"."); $start = $weizhi + $sublen; $filestr = substr($filestr,$start); } return $filestr; } // 函数9; // 循环逐个字符的截取,直到找到"."; function subpos($filestr){ $length = strlen($filestr); for($i=$length-1;$i>=0;$i--){ // 从最右边(后面)开始; if(substr($filestr,$i,1)=="."){ // 找出右边开始"."($i)的位置(值); $str = substr($filestr,$i); break; // 找到第一个就结束,跳出整个循环,不然还有往前找其他的"."; } } return $str; } // 函数10; // 循环先找到第一个"."的位置,然后偏移后再次寻找; function posoffset($filestr){ $offset = 0; $sublen = strlen("."); while(strpos($filestr,".",$offset)!==false){ $weizhi = strpos($filestr,".",$offset); $offset = $weizhi + $sublen; } return substr($filestr,$offset); } // 函数11; function filefun($filestr) { $p = pathinfo($filestr); return $p["extension"]; }
// 1、由于系统字符串反转函数strrev()函数,只能对acII字符集的字符(字节)进行反转; // 2、自写一个包含其他字符的字符串反转函数; // 3、假设为unicode字符集,utf编码; $aaa = "ghj我のサービ是一スです个中分gfdfhdgh"; // 函数1; function utf8srerev($aaa){ if(!is_string($aaa)){ return "no string"; } $lengths = strlen($aaa); // 字节长度; $start = 0; // 从哪个字节开始截取; $count = 0; // 截取几个字节代表一个字符; $arr =array(); // 将截取的每个字符,一次存在数组中; $res = ""; while($start<$lengths){ $highbin = decbin(ord(substr($aaa,$start,1))); // 字符中的高字节二进制; if(strlen($highbin)<8){ $count =1; }else if(substr($highbin,0,3) == "110"){ $count =2; }else if(substr($highbin,0,4) == "1110"){ $count =3; }else if(substr($highbin,0,5) == "11110"){ $count =4; }else if(substr($highbin,0,6) == "111110"){ $count =5; }else if(substr($highbin,0,7) == "1111110"){ $count =6; } $arr[] = substr($aaa,$start,$count); $start = $start +$count; } $arrgeshu = count($arr); //数组元素个数,即:不同类型(中、繁体、英文..)字符数; // 也可以用每次截取的字符数++,来取得得出的个数; for($i = $arrgeshu-1;$i>=0;$i--){ $res .= $arr[$i]; } return $res; } //函数2; function strrevutf8($aaa){ $lengths = strlen($aaa); $zifu = array(); for($i=0;$i<$lengths;){ $highbit = decbin(ord(substr($aaa,$i,1))); // 每个字符的高字节二进制表示; if(strlen($highbit)<8){ $zifu[]= $aaa[$i]; $i++; }else if(substr($highbit,0,3)=="110"){ $zifu[] = $aaa[$i].$aaa[$i+1]; $i += 2; }else if(substr($highbit,0,4)=="1110"){ $zifu[] = $aaa[$i].$aaa[$i+1].$aaa[$i+2]; $i += 3; }else if(substr($highbit,0,5)=="11110"){ $zifu[] = $aaa[$i].$aaa[$i+1].$aaa[$i+2].$aaa[$i+3]; $i += 4; }else{ // 最后一个判断(else),不需要再加条件判断了; $zifu[] = $aaa[$i].$aaa[$i+1].$aaa[$i+2].$aaa[$i+3].$aaa[$i+4]; $i += 5; } } return implode(array_reverse($zifu)); // 数组先反转、再链接成字符串; } // 函数3: 系统自带函数; 两个对字符进行运行的mb_函数 function mb_strrevutf8($aaa){ $len = mb_strlen($aaa,"utf8"); // utf8编码下 字符 的个数; $res = ""; // 反转后结果字符串; for($i=1;$i<=$len;$i++){ $res .= mb_substr($aaa,-$i,1,"utf8"); } return $res; }
//给两个参数,一个整数值A,代表需要转换的数字,一个整数B,代表返回值的宽度,要求获得,整数A的十六进制字符串,如果宽度不够B,那么前面用0补齐. //例如 fn(12,8); 返回 "0000000C" // 方法1: function dectohex($num,$bits){ $yushuarr = array(); // 将每个数/16的余数,分别存储起来; while(floor($num/16) !=0){ $yushuarr[] = $num%16; $num = floor($num/16); } $yushuarr[] = $num%16; // 当商是0后,取出最后的余数; $beitihuan = array("10","11","12","13","14","15"); $tihuancheng = array("A","B","C","D","E","F"); $sss = implode($yushuarr); $shiliu = strrev(str_replace($beitihuan,$tihuancheng,$sss)); return str_pad($shiliu,$bits,0,STR_PAD_LEFT); //return $sss; } echo(dectohex(1566,8)); // 方法2: function tohex($iNumber,$iCount){ $m=$iNumber; $l=$iCount; $arr=array(); for($i=0;;$i++){ //余数定理分解 $tmp=$m%16; //控制变量$m $m=$m/16; if($tmp<10){ //取余<10填充数组 $arr[]=$tmp; }else{ //十六进制的 10-15 $arrtmp=array("A","B","C","D","E","F"); //取余继续填充数组 $arr[]=$arrtmp[$tmp-10]; } //结束单次循环 if($m<=1){ break; } } //根据$i判断是否继续填充0 if(count($arr)<$l){ //得到需要填充的个数 $len=$l-count($arr); //循环填充到数组当中 for($i=0;$i<$len;$i++){ $arr[]=0; } } //转化,反转 echo strrev(implode("",$arr)); } // 方法3: //十进制转(2-16)进制 function tohex($n,$z,$l){ $z=ceil($z); if($z<2 || $z>16){ echo "进制错误"; exit; } for($arr=array();;$n=$s){ $t=$n%$z; $s=floor($n/$z); //如果$s不等于0,则说明$n的值大于当前的进制值,需要进位 if($t<10){ $arr[]=$t; }else{ $tmp=array("A","B","C","C","E","F"); $arr[]=$tmp[$t-10]; } if($s==0){ break; } } return strrev(str_pad(implode("",$arr),$l,"0")); } echo tohex(568,16,9); // 函数4: function dectohex($a,$b){ // $a表示将要转变成16进制的数; $b表示字符串的宽度; if($a == 0){ return 0; } while($a != 0){ $yyy = $a%16; if($yyy<10){ $arryu[] = $yyy; } else{ $temp = array("A","B","C","D","E","F"); $arryu[] = $temp[$yyy-10]; } $a = floor($a/16); } $str = strrev(implode($arryu)); if(strlen($str)< $b){ $str = str_pad($str,$b,"0",STR_PAD_LEFT); } return $str; } echo dectohex(1990,8);
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: PHP常用数组函数以及字符串函数
- 下一篇: CUDA:求平方和