$str_z="a b b c c c d d d d";
$arr_s=explode(" ",$str_z);
在 $arr_s 中,d出现4次,c出现3次,b出现2次,
我现要把出现次数最多的(前三名) d c b 输出来,
这要怎么实现呀,

解决方案 »

  1.   

    <?php
    $str_z="a b b c c c d d d d"; 
    $arr_s=explode(" ",$str_z);
    $res = array();
    //先循环计算每个元素出现的次数,得到数组
    foreach($arr_s as $k=>$v)
    {
    if(!isset($res[$v]))
    {
    $res[$v]=0;
    }
    $res[$v]++;
    }
    //把数组的键名跟值相换
    $res = array_flip($res);
    //再对数组根据键名的值进行排序。这时出现次数最多的元素就排在最后面。便于用array_pop()取得,
    ksort($res);
    $i=0;
    while($i<3)
    {
    $item = array_pop($res);
    echo $item."<br>";
    $i++;
    }
    ?>
      

  2.   

    $str_z="a b b c c c d d d d"; 
    $arr_s=explode(" ",$str_z); 
    $res = array(); 
    $res = array_count_values($arr_s);
    ksort($res);//进行从大到小的排序
    $i = 0;
    foreach($res as $key => $value){
       $i++;
       echo $key.'<br>';
       if($i==2){
         break;
       }
    }
      

  3.   

    array_count_values 
    asort
    即可