How can I sort an array by number of occurrence of its values?

后端 未结 4 394
暗喜
暗喜 2020-12-21 04:08

I have the following array:

$name_arr = array(\'raj\',\'raj\',\'ganesh\',\'rahul\',\'ganesh\',\'mayur\',\'raj\',\'rahul\');

I want to sort

相关标签:
4条回答
  • 2020-12-21 04:39

    Simple way using array_count_values and arsort:-

    $array = array_count_values($name_arr); //get all occurrences of each values
    arsort($array);
    print_r($array);//print occurrences array
    $final_array = array();
    
    foreach($array as $key=>$val){ // iterate over occurrences array
      for($i=0;$i<$val;$i++){ //apply loop based on occurrences number
        $final_array[] = $key; // assign same name to the final array
      }
    }
    
    print_r($final_array); // print final array
    

    Output:- https://eval.in/847428

    0 讨论(0)
  • 2020-12-21 04:40
    <?php
    
    $name_arr = array('raj','raj','ganesh','rahul','ganesh','mayur','raj','rahul');
    
    rsort($name_arr);
    
    print_r($name_arr);
    

    Output

    Array (raj , raj , raj , rahul , rahul, mayur, ganesh, ganesh )
    
    0 讨论(0)
  • 2020-12-21 04:42

    The easiest way to solve this is by using the built-in functions array_count_values() and usort():

    <?php
    
    $name_arr = array('raj','raj','ganesh','rahul','ganesh','mayur','raj','rahul');
    
    $valueCount = array_count_values($name_arr);
    
    $final_arr = $name_arr;
    
    usort($final_arr, function ($a, $b) use ($valueCount) {
        return $valueCount[$b] - $valueCount[$a];
    });
    
    var_dump($final_arr);
    

    For reference, see:

    • http://php.net/manual/en/function.usort.php
    • http://php.net/manual/en/function.array-count-values.php

    For an example, see:

    • https://3v4l.org/4LXVc
    0 讨论(0)
  • 2020-12-21 04:49

    simple use array_count_values and array_fill and array_merge

    1st : array_count_values will get the values presented count as a array like below .

    Array ( [raj] => 3 [ganesh] => 2 [rahul] => 2 [mayur] => 1 )
    

    2nd : Apply arsort() . descending order, according to the value

    3rd : Loop that array and make the new array based on count fill the array using array_fill .

    4th : Then merge the array .

    <?php
    
    $name_arr = array('raj','raj','ganesh','rahul','ganesh','mayur','raj','rahul');
    
    $new_arr = array_count_values($name_arr);
    
    arsort($new_arr);
    
    $value=array();
    
    foreach($new_arr as $key=>$val){
    
       $value= array_merge($value,array_fill(0,$val,$key));
    }
    
    print_r($value);
    
    ?>
    
    0 讨论(0)
提交回复
热议问题