如何分组数组但不创建新对象?

I have an array that looks like this:

array (size=21)
  0 => string '2' (length=1)
  1 => string '' (length=0)
  2 => string '20' (length=2)
  3 => string '19' (length=2)
  4 => string '14' (length=2)
  5 => string '13' (length=2)
  6 => string '' (length=0)
  7 => null
  8 => null
  9 => string '20' (length=2)
  10 => null
  11 => string '10' (length=2)
  12 => string '' (length=0)
  13 => null
  14 => string '13' (length=2)
  15 => null
  16 => string '' (length=0)
  17 => null
  18 => null
  19 => string '' (length=0)
  20 => string '20' (length=2)

And I would like to create a new array from this array by grouping rows with the same string. e.g.

2 => string '20' (length=2) with 20 => string '20' (length=2) and with 9 => string '20' (length=2)

and

5 => string '13' (length=2) with 5 => string '13' (length=2)

etc.

and order the new created array rows based on how many times the string occures there.

Order need to be DESC from the most occurrences to the last like a classic top something chart (The most present strings are first and the least are low)

So, the modified array will look like this:

 array (size=21)
      0 => string '20' (length=2)
      1 => string '13' (length=2)
      ...

I also need somehow to handle null results e.g. 17 => null to be not incorporated at all in the final array modified result.

This should do the trick:

// Filter the "null results" first
$myarray = array_filter($myarray, create_function('$arg', '
    return !is_null($arg);
'));

$occurrences = array_count_values($myarray);
// EDIT: arsort preserves the key => value correlation
arsort($occurrences, SORT_NUMERIC);

var_dump(array_keys($occurrences));

Try this.

$result = array_count_values($a);
arsort($result);

$result = array_keys($result);