现有两个.txt文件A.txt和B.txt, A.txt里放置放置的是3000个常用的简体字;B.txt里放置放置的是与A.txt位置一一对应的3000个繁体字,
即:A.txt ( utf-8 )
皑蔼矮艾碍爱隘鞍氨安...B.txt ( utf-8 )
皚藹矮艾礙愛隘鞍氨安...现在我有一段文字(简体)放在变量$chr内,想通过一个函数把这段文字变成繁体(利用两个txt转换),但是我自己写的算法效率比较低,请各位高手帮忙写个效率高的算法,感激不尽,谢谢!
( 网页 utf-8;php 4 )另:网上搜到的有的不是很好,有的需要开iconv,但是我的服务器不行。

解决方案 »

  1. ·双线主机 100M/35元/年,免费送数据库(自选MY/MSSQL) 
    ·详情请访问:http://www.cqfad.com 
      

  2. 可不可以把这两个文本放到数据库离 
    以 表 : 字段1 简体 字段2 繁体 对应好然后把需要转换的字符串在 sql过程里写 这样是不是应该要快点?
      

  3. 我擦,刚写的差不多了,一不小心给刷没了
    我是这么想的,把两个字体全部放入两个数组中。分别为$jianti,$fanti。
    然后将$chr分解为一个数组,使用$arr=explode('',$chr);
    再然后获得$arr中每个元素值在$fanti中对应的键值。
    $keys=array();
    foreach($arr as $key){
     $keys[]=array_keys($jianti,$key);
    }
    再根据获得的键值得到简体字对应的繁体字
    foreach($keys as $value){
     $arr[]=$fanti($value);
    }最后合并数组$arr就得到了繁体字的字符串
    $chr=join('',$arr);
    记得释放变量,因为这两个数组实在太大了。
    unset($arr,$fanti,$jianti);
    这样就可以了。前提是简体字和繁体字要一一对应,不能有错位现象。
    这两个数组可以保存到一个PHP文件中,
    <?php 
    $jianti=array();
    $fanti=array();
    ?>
    使用时直接include这个文件就可以了。
    不知道这样效率怎么样,呵呵~~希望有所帮助
      

  4. 给你个思路哈,不一定对
    1、不能将文件全部读入,太耗费资源
    2、文字库,应该是有顺序的,按照汉字的内码排序
    3、关键部分就是定位每一个字在库中的位置
    4、可以考虑生成一个索引文件,缩小查找范围,先根据需要查找字的内码,确定一个查找范围,然后将在范围内搜索汉字的位置。
    举例: 比如 库有 3000个字符,那么我们这样建立索引 每100个为一块 那么 就可以得到30个块:
    块号  起始码  结束码
    0     xxx    xxx 
    1     xxx    xxx 对于一个汉字 先判断他在那个块,然后搜索块,确定位置, 最终就得到汉字的位置,直接在繁体库中seek 然后read就可以了。
    耗费资源主要在打开文件上。
      

  5. 把第一个文件的每个汉字作为Key,第二个文件的每个汉字作为Value读入一个hash table。
    实际操作的时候,将$chr作为Key来检索value.
      

  6. 不同意楼上的说法,如果$chr有一千个字符,那么是不是要查询1000次数据库?虽然不用每次都连接,但是这个数字也是无法接受的
    貌似可行,不过实现起来难度不低啊~
    况且如果字符数很少,只有3000个字符,呵呵,创建索引文件的效果不会很明显,就像数据库一样,只有几百行记录,根本就不用去索引,而是直接全表扫描,因为全表扫描更快~~
      

  7. 繁简转换放在客户端用js处理好了,省服务器资源,网上一搜一大片
    先将需要转换的地方隐藏,转换后显示,用户还以为用了AJAX呢 (*^__^*) 
      

  8. 一次性生成一份索引数组的文件,比如简体的unicode做键,繁体字做值之类的,这个是一次性生成。
    以后简体欲转成繁体,先转成unicode,再根据数组读取相应的繁体字。
    或者存数据库更好。
      

  9. PHP中这种转换不需要写很复杂的算法,
    strtr函数应该是最高效的。
      

  10. 不必用php,用js.数组a:
        a[简体字]=对应的繁体字;
    数组c:
        c=chr.split('');
    for(i=0;i<c.length;i++)
        s+=a[c[i]];
      

类似问题 »