实现字符串的翻转

首先,要实现字符串的翻转,得对字符串中的单个字符进行操作

a.先提取字符

    --提取字符需要按一定规则提取,因此需要有每个字符的一个标识

b.然后对字符重新排序,翻转即按反序排

1.实现英文字符串翻转

   提取字符:对于英文字符串,可以直接使用$string[$i]的方式提取字符,类似于读取数组元素值。

   反序排列字符:strlen()获得字符串的长度,for()循环反序读取字符串的字符并依次写入一个新字符串变量。

方法a.

实现如下:

<?php
function my_strrev($string)
{
    $len=strlen($string);
    $new_str='';
    
    for($i=$len;$i>=0;$i--)
   {
       $new_str.=$string[$i]; 
    
   }

   return $new_str;
 
}

$mystr="happy new year";

echo my_strrev($mystr);
?>
输出:raey wen yppah

说明:strlen()获取字符串的长度,用于指定字符的位置,结合$string[$i]使用

方法b

实现如下:

$mystr="happy new year";

echo strerv($mystr);
输出:raey wen yppah

2.实现中文字符串翻转

   在编写代码之前首先要了解,中文字符和西(英)文字符是采用的不同编码,一个中文字符(如使用utf-8编码)使用3个字节编码,而一个英文字符只使用1个字节

   编码;因此,如果以字节数衡量,一个中文字符的长度相当于三个英文字符的长度。在英文翻 转实现中使用的 strlen()函数获取的字符长度是英文字符长度,

   因为它是按单个字节来读取字符长度的,刚好一个字节对应一个英文字符;若用它来获取中文字符串的长度,获得的值将是实际中文字符长度(数)的3倍。总

   之,要明白strlen()是按字节来获取字符串字符长度的,英文是一个字节一个字符,中文是3个字节一个字符,严格来讲,strlen()是获取字符串占用的字节数。

   ps:我这里字符串长度的含义是指字符串所含字符的个数,一个长度对应一个相应字符。

   提取字符:中文字符串无法使用$string[$i]的方式获得单个中文字符,会返回空白,但不影响中英文混合字符串中对英文字符的获取,此方式类似strlen()函数

                 是以单个字节为单位查找字符的;这里我使用mb_substr()函数,它可以按照指定字符编码从一个字符串的指定位置开始获取指定长度(数目)的字

                 符(也即一个子字符串)。

   反向排序:使用mb_strlen(string $str, string $encoding)函数获取指定字符编码的字符串的字符长度,因此,这个函数中英文字符串均适用。

   实现如下:

$mystr="我的节日,我做主ok";

function my_cstrrev($string,$encoding='UTF-8')
{
    $slen=mb_strlen($string);      
    $new_str='';

    for($i=$slen;$i>=0;$i—)  
    {
       $new_str.=mb_substr($string,$i,1,$encoding);   //英文字符也将转为$encoding编码     
     }
    return $new_str;
}
echo my_cstrrev($mystr).'</br>';
输出:ko主做我,日节的我
posted @ 2013-02-05 15:17  uooki  阅读(426)  评论(0编辑  收藏  举报