本帖最后由 mithetwo 于 2012-06-20 13:49:12 编辑

解决方案 »

  1.   

    代码少的, 阿门, 这种认知太可怕了.PHP是你第一门语言, 也是你最后一门语言了.
      

  2.   

    我的认知是最少的代码且效率相差不大我当然喜欢代码少的...
    我非常希望PHP是最后一门语言,因为我没打算当PHP当口饭吃。
    完成心中理想哥就远离编程的世界,呵呵呵。
      

  3.   

    不用看功能
    上面欠的是判断$keyNum长度做不同判断
    我不想4个长度做4个判断,所以想看下精良的写法。。
      

  4.   

    $keyword="本德|鲍尔森";
    改为
    $keyword = array('本德', '鲍尔森');$ar = preg_split('/('.$keyword.')/', $varchar, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE);
    改为
    $ar = preg_split('/('.join('|', $keyword).')/', $varchar, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE);if($ar[$i][0] == '本德'||$ar[$i][0] == '鲍尔森') {
    改为
    if(in_array($ar[$i][0], $keyword)) {
      

  5.   

    to qq120848369
    lz 的代码不是如你所说 http://topic.csdn.net/u/20120619/02/c024bcf0-9c61-4e61-b58c-2844f0af2310.html
    1,扫一遍找出所有的关键字。
    2,再扫一遍,计算出每个end_index位置之前的关键字总数,同时计算180个字符之前的beg_index位置的关键字个数差值。
    3,对关键字差值最大的180长度的段,strrstr,strstr分别头尾找到一个关键字,把多余的部分切掉,这样可以让字符再少一点。的思路做的吗?
    1、用 preg_split 完成找出所有的关键字
    2、从每一个关键字出现的位置开始统计指定长度内关键字出现的次数(双重循环)当然 lz 的代码也是用可优化的地方的,比如
    外层循环中的
      $t = $ar[$j][1];
     $r[$t] = 0;
    与内层循环中的
     $r[$t=$ar[$i][1]] = 0;
    存在重复计算的问题(因为外层的 $j 已经遍历了全部关键字节点)