博主辛苦了,我要打赏银两给博主,犒劳犒劳站长。
【摘要】通常情况下,我们看到字符串翻转第一个想到的函数就是strrev(),最近看到一个PHP面试题,问如何实现字符串翻转?想必大伙都跟我一样,填写strrev(),可是我们都错了,这并不是出题者想要的答案。
首先看看,使用strrev()进行字符串翻转
$str = 'abc,def.'; // 时刻记住推荐使用单引号'',效率高
$newstr = strrev($str);
echo '原字符串是:'.$str; // 'abc,def.'
echo ' 翻转后的字符串是:'.$newstr; // '.fed,cba'
echo '<br />';
// 但是当有中文存在的时候,则出现了乱码
$str = 'a这b是c子,符d串ef.';
$newstr = strrev($str);
echo '原字符串是:'.$str; // 'a这b是c子,符d串ef.'
echo ' 翻转后的字符串是:'.$newstr; // 输出一串乱码
echo '<br />';
输出结果如图:
解决方法,使用mb_strlen()和mb_substr(),加上字符编码
// mb_strlen($str,'utf-8');具有字符编码的mb_strlen()多字节字符都被计算为1
$str = 'a好的';
$str_count = mb_strlen($str,'utf-8');
echo $str_count; // 输出3
echo '<br />';
$sub_str = mb_substr($str,2,1,'utf-8'); // 从第二个字符开始截取$str,截取长度为1,即输出'的'
echo $sub_str;
echo '<br />';
结果如图所示:
根据这一性质,我们可以实现中英文混合字符串翻转
echo "<meta charset = 'utf-8'>";
function myStrrev($str,$encoding='utf-8'){
$newstr = '';
$len = mb_strlen($str);
for($i=$len-1; $i>=0; $i--){
$newstr .= mb_substr($str,$i,1,$encoding);
}
return $newstr;
}
$string = '相信women是正确的。';
echo $string;
echo '<br />';
echo myStrrev($string); // '的。的确正是nemow信相'
运行结果如图所示:
版权归 马富天博客 所有
本文链接地址:http://www.mafutian.net/138.html
转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^
顶0
踩0