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',
    10=>'Hope',
    11=>'Hello Word',
    12=>'Hope',
    13=>'Hello Word',
    14=>'Hello Word',
    15=>'Hello Word');
print_r($arr);

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:

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

Upvotes: 1

Views: 59

Answers (1)

FirstOne
FirstOne

Reputation: 6217

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
print_r($array);

That will output:

Array
(
    [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.

Upvotes: 3

Related Questions