Anderson Montes De oca Anderson Montes De oca - 1 year ago 46
PHP Question

How to order a php array based on duplicate values

I need to sort an array by quantity of duplicate values.

Here's an example:

$arr = array(
1=> 'Love is true',
2=> 'Love is true',
3=> 'Hello Word',
4=> 'Hello Word',
5=> 'Hope',
6=> 'Hope',
7=> 'Love is true',
8=> 'Hello Word',
9=> 'Hello Word',
11=>'Hello Word',
13=>'Hello Word',
14=>'Hello Word',
15=>'Hello Word');

In this array, we can see that

Love is true > duplicate > 3x
Hello Word > duplicate > 8x
Hope > duplicate > 4x

I'd like the sorting to put the values that repeat the most first:

Hello Word position 1# In array (repeats 8 times)
Hope 2# In array (repeats 4 times)
Love is true 3# In array (repeats 3 times)

So it returns this array:

[0] => Hello Word
[1] => Hope
[2] = Love is true

Answer Source

You can do it like this:

$count = array_count_values($arr); // count each repetition
arsort($count); // sort the values
$array = array_keys($count); // get the expected array

That will output:

    [0] => Hello Word
    [1] => Hope
    [2] => Love is true

See it in action here.

You can get some references for the functions used in this answer below:

  • array_count_values: Counts all the values of an array;
  • asort: Sort an array and maintain index association;
  • array_keys: Return all the keys or a subset of the keys of an array.

You can var_dump each step of the process to see what's going on.