php页面中,如:
array("a","b","30","d","我们");
$content="abcd,30abd30,我们qssdsdsaddfdaad";1 需得到数组中五个元素 在$content上出现次数最高的元素(如果有多个元素出现次数一样高,一并输出)
这如何实现呀
thanks

解决方案 »

  1.   

    <?php
    $array = array("a","b","30","d","我们");
    $content="abcd,30abd30,我们qssdsdsaddfdaad";
    $count1 = 0;
    $count2 = -1;
    foreach($array as $value){
    $count1 = substr_count($content, $value);
    if($count1 > $count2){
    $maxValue = $value;
    $count2 = $count1;
    }
    }
    ?>
      

  2.   

    <?php
    $array = array("a","b","30","d","我们");
    $content="abcd,30abd30,我们qssdsdsaddfdaad";
    $count1 = 0;
    $count2 = -1;
    foreach($array as $value){
    $count1 = substr_count($content, $value);
    if($count1 > $count2){
    $maxValue = $value;
    $count2 = $count1;
    }
    }
    echo $maxValue;
    ?>
      

  3.   

    有点小问题  如果有多个元素出现次数一样高,一并输出)
    $array = array("a","b","30","d","我们");
    $content="abab";
    应该输出 a b ,可上面的代码只输出了 a ,怎么调整呀,
      

  4.   

    又发一遍?分多啦?
    $ar = array("a","b","30","d","我们");
    $content = "abcd,30abd30,我们qssdsdsaddfdaad";$p = join('|', $ar);
    preg_match_all("/$p/" , $content, $r); //按规则提取成员$t = array_count_values($r[0]); //统计每个成员的出现次数$p = array_keys($t, max($t)); //提取等于 max($t) 条件的项,有多少取多少print_r($p);
      

  5.   

    这个我测了一遍,两位老兄的代码都有点不完整
    最好还是老实地写一下,下面在utf-8下通过
    $array = array("a","b","30","d","我们");
    $content="aaaabcd,30abd30,我们我我们qssdsdsaddfdaad";
    $t=array();
    foreach($array as $value){
    $t[$value]= substr_count($content, $value);  
    }
    $p = array_keys($t, max($t));
    Print_r($p);原因:
    http://www.zzxj.net/blog/fxs_2008/archive/2010/08/10/195.html
      

  6.   

    不是有处理函数可用吗?
    preg_quote -- 转义正则表达式字符这里讨论的是算法,又不是最终产品
      

  7.   


    error_reporting(7);
    $pattern = array("a","b","30","d","我们");
    $content="abcd,30abd30,我们qssdsdsaddfdaad";
    preg_replace('/'. implode('|',array_map('preg_quote',$pattern)) . '/e', '$rs[\\0]++', $content);
    arsort($rs);
    print_r($rs);
    while (key($rs)){
        echo key($rs);
        if (key($rs) != next($rs)) break;
    }借鉴老大的思想,凑个热闹。。
      

  8.   

    倒数第二行写错了。。应该是if (current($rs) != next($rs)) break;