【问题标题】:How to group array but not create new object?如何对数组进行分组但不创建新对象?
【发布时间】:2012-10-11 17:46:12
【问题描述】:

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

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”(长度=2)

5 => 字符串 '13' (length=2)5 => 字符串 '13' (length=2)

等等。

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

顺序需要从出现次数最多到最后一次,就像经典的顶级图表一样(出现次数最多的字符串在前,最少的为低)

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

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

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

【问题讨论】:

  • 看起来像个作业,自己试试看有没有问题。

标签: php arrays


【解决方案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));

【讨论】:

  • 谢谢,它输出如下: array (size=8) 0 => int 0 1 => int 1 2 => int 2 3 => int 3 4 => int 4 5 => int 5 6 => int 6 7 => int 7
  • 是的,我的错。请稍等,我会解决问题并更新。
  • 谢谢,我猜它会将它们组合在一起,但我需要保留这些值,例如“20”、“13”等,并根据出现重新排序。该怎么做?
  • 已编辑。现在应该没问题了。
【解决方案2】:

试试这个。

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

$result = array_keys($result);

【讨论】:

    猜你喜欢
    • 2018-11-27
    • 2018-01-12
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 2020-11-23
    • 1970-01-01
    相关资源
    最近更新 更多