1

我有一个看起来像这样的数组:

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)

我想通过对具有相同字符串的行进行分组来从该数组创建一个新数组。例如

2 => 字符串 '20' (length=2)20 => 字符串 '20' (length=2)9 => 字符串 '20' (length=2)

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

等等

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

顺序需要从出现次数最多到最后一次的 DESC,就像经典的顶级事物图表一样(出现次数最多的字符串是第一位的,最少的是低位)

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

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

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

4

2 回答 2

1

这应该可以解决问题:

// 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));
于 2012-10-11T09:42:51.560 回答
0

尝试这个。

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

$result = array_keys($result);
于 2012-10-11T09:46:12.983 回答