代码如下$arr = Array
(
    [0] => 111
    [1] => 222
    [2] => 111
    [3] => 233
    [4] => 123
    [5] => 111
    [6] => 123
    [7] => 111
    [8] => 111
    [9] => 222
}类似这样的一个数组,我想按照出现最多的顺序来进行数组的重新排列。并去除重复的数字。

解决方案 »

  1.   

    <?php 
    $arr   =   Array 

            0   =>   111 ,
            1   =>   222 ,
            2   =>   111 ,
            3   =>   233 ,
            4   =>   123 ,
            5   =>   111 ,
            6   =>   123 ,
            7   =>   111 ,
            8   =>   111 ,
            9   =>   222 ,
    );
    $rs=array();   
    foreach($arr as $v){   
    $rs[$v]++;     
    }   
    arsort($rs);
    $last=array();  
    foreach ($rs as $key=>$val){
    $last[]=$key;
    }
    print_r($last);//Array ( [0] => 111 [1] => 123 [2] => 222 [3] => 233 ) 
    ?>
      

  2.   

    $rs[$v]++
    请问这句话代表什么意思
      

  3.   

    是不是应该写成 $rs[$v] = $v; 这样好像和 $rs[$v]++ 是一个效果,使用 $rs[$v]++ 会报错
      

  4.   

    哦不对,你的方法是对的但是会 Undefined index 的错误
      

  5.   

    我觉得还是我写的这个比较简单,也容易理解。<?php
    $arr = array(111, 222, 111, 233, 123, 111, 123, 111, 111, 222);
    $arr = array_count_values($arr);
    arsort($arr);
    $arr = array_flip($arr);
    print_r($arr);
    ?>
      

  6.   


    #1楼的算法是逐个输出数组里值,每个值在第一次输出的时候以$rs[$v];为键,每当出现一次时,以$rs[$v]++;为键,因为$rs[$v];默认为0,通过这个语句,就实现了原始数组里每个元素的计数,就形成了一个新数组,此数组的键为原数组的值,而值为其出现的次数。
    再通过下面的这个(将$rs的键值反过来)foreach ($rs as $key=>$val){
        $last[]=$key;
    }就输出了楼主所需要的!#1楼是解决方法的之一,楼主还可以想一下有其他的方法
      

  7.   

    $arr = array(111, 222, 111, 233, 123, 111, 123, 111, 111, 222);$arr = array_count_values($arr);
    arsort($arr);
    $result = array_keys($arr);print_r($result); 
      

  8.   


    //output
    Array ( [0] => 111 [1] => 123 [2] => 222 [3] => 233 )