¿Cómo puedo ordenar una matriz por el número de ocurrencia de sus valores?

Tengo la siguiente matriz:

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

Quiero ordenarlo así:

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

¿Cómo puedo lograrlo?

Manera simple usando array_count_values y 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 

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

uso simple array_count_values y array_fill and array_merge

Primero: array_count_values ​​obtendrá los valores presentados como una matriz como la que se muestra a continuación.

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

2º: Aplicar arsort (). Orden descendente, según el valor.

Tercero: haga un bucle en esa matriz y haga que la nueva matriz basada en el conteo llene la matriz con array_fill

4to: Luego fusionar la matriz.

 $val){ $value= array_merge($value,array_fill(0,$val,$key)); } print_r($value); ?> 

La forma más fácil de resolver esto es mediante el uso de las funciones array_count_values() y usort() :

  

Para referencia, ver:

Para un ejemplo, ver:

  

Salida

 Array (raj , raj , raj , rahul , rahul, mayur, ganesh, ganesh )