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

时间:2012-10-11 09:28:17

标签: 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 '' (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'(长度= 2) 20 =>字符串'20'(长度= 2)并且 9 =>字符串'20'(长度= 2)

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

等。

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

订单需要从最常见的DESC到最后一个像经典顶级的东西图表(最现在的字符串是第一个,最少的是低)

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

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

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

2 个答案:

答案 0 :(得分: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));

答案 1 :(得分:0)

试试这个。

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

$result = array_keys($result);