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

Php 如何分组数组而不创建新对象?,php,arrays,Php,Arrays,我有一个如下所示的数组: 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 '' (lengt

我有一个如下所示的数组:

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)
 array (size=21)
      0 => string '20' (length=2)
      1 => string '13' (length=2)
      ...
我想通过将具有相同字符串的行分组,从这个数组创建一个新数组。e、 g

2=>字符串“20”(长度=2)20=>字符串“20”(长度=2)9=>字符串“20”(长度=2)

5=>字符串'13'(长度=2)5=>字符串'13'(长度=2)

等等

并根据字符串出现的次数对新创建的数组行进行排序

顺序需要是从出现次数最多到最后的描述,就像一个经典的顶部图表(出现的字符串最多的是第一个,最少的是低的)

因此,修改后的数组将如下所示:

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)
 array (size=21)
      0 => string '20' (length=2)
      1 => string '13' (length=2)
      ...

我还需要以某种方式处理空结果,例如,17=>null根本不包含在最终的数组修改结果中。

这应该可以做到:

// 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));

这应该可以做到:

// 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));
试试这个

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

$result = array_keys($result);
试试这个

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

$result = array_keys($result);

看起来像一个作业,你自己试试看,问是否有问题。看起来像一个作业,你自己试试看,问是否有问题。谢谢,它输出这个:数组(大小=8)0=>int01=>int12=>int23=>int34=>int45=>int56=>int67=>int7是的,我的错。请稍等,我会解决问题并更新。谢谢,我想它会将它们正确分组,但我需要保留值,例如“20”、“13”等,并根据出现的情况重新排序。怎么做?编辑它。现在应该可以了。谢谢,它输出这个:数组(大小=8)0=>int01=>int12=>int23=>int34=>int45=>int56=>int67=>int7是的,我的错。请稍等,我会解决问题并更新。谢谢,我想它会将它们正确分组,但我需要保留值,例如“20”、“13”等,并根据出现的情况重新排序。怎么做?编辑它。现在应该没事了。