基于重复元素数排序/限制PHP中的多维关联数组

基于重复元素数排序/限制PHP中的多维关联数组,php,Php,我在PHP中有一个多维数组,如下所示: $array = Array ( [0] => Array ( [bill] => 1 ) [1] => Array ( [bill] => 1 ) [2] => Array ( [bill] => 1 ) [3] => Array ( [bill] => 1 ) [4] => Array ( [ja

我在PHP中有一个多维数组,如下所示:

$array = Array ( 
        [0] => Array ( [bill] => 1 ) 
        [1] => Array ( [bill] => 1 ) 
        [2] => Array ( [bill] => 1 ) 
        [3] => Array ( [bill] => 1 )        
        [4] => Array ( [jack] => 5 ) 
        [5] => Array ( [jack] => 5 ) 
        [6] => Array ( [jake] => 6 ) 
        [7] => Array ( [jake] => 6 ) 
        [8] => Array ( [jake] => 6 ) 
        [9] => Array ( [jake] => 6 ) 
        [10] => Array ( [sara] => 7 ) 
        [11] => Array ( [sara] => 7 ) 
        [12] => Array ( [sara] => 7 ) 
        [13] => Array ( [sara] => 7 ) 
        [14] => Array ( [william] => 8 ) 
        [15] => Array ( [william] => 8 ) 
        [16] => Array ( [william] => 8 ) 
        [17] => Array ( [william] => 8 ) 
        [19] => Array ( [william] => 8 ) 
        [20] => Array ( [martin] => 9 ) 
        [21] => Array ( [martin] => 9 ) 
        [22] => Array ( [martin] => 9 ) 
        [23] => Array ( [tara] => 10 ) 
        [24] => Array ( [tara] => 10 ) 
        [25] => Array ( [tara] => 10 )              
        [26] => Array ( [tara] => 10 )              
      );
我想将
$array
转换为
$result
,这样它就可以首先根据相似元素的数量对数组进行排序,然后返回前五个值。例如,
$array
有五个相似的
[william]=>8
,四个相似的
[bill]=>1
,四个相似的
[jake]=>6
,四个相似的
[sara]=>7
,四个相似的
[tara]=>10
,三个相似的
[martin]=>9
和两个相似的
[jack]=>5
$array
变量中。因此,包含前五个重复次数最多的元素的
$result
变量应如下所示:

$result = Array (
        [0] => Array ( [william] => 8 ) 
        [1] => Array ( [bill] => 1 ) 
        [2] => Array ( [jake] => 6 ) 
        [3] => Array ( [sara] => 7 ) 
        [4] => Array ( [tara] => 10 ) 
      );

你能帮我解决这个问题吗?

创建一个新的数组,将键和值组合在一起,并使用
array\u count\u values
来计算出现的次数。最后排序并检索前5名

$new = array();      

foreach($array as $key => $value) {
    $new[] = key($value) . '_' . current($value);
}

$counts = array_count_values($new);
arsort($counts);
$results = array();

foreach(array_splice($counts,0,5) as $key => $count) {
    $key = explode('_',$key);
    $results[] = array($key[0] => $key[1]);
}

print_r($results);
结果:

array(5) {
  [0]=>
  array(1) {
    ["william"]=>
    int(8)
  }
  [1]=>
  array(1) {
    ["bill"]=>
    int(1)
  }
  [2]=>
  array(1) {
    ["jake"]=>
    int(6)
  }
  [3]=>
  array(1) {
    ["sara"]=>
    int(7)
  }
  [4]=>
  array(1) {
    ["tara"]=>
    int(10)
  }
}

希望这对您有所帮助。

您无法控制源代码?@Dagon,不是真的,我需要按问题中的方式处理$array,知道吗?foreach循环,创建新数组,添加为key(name)changes@Dagon,你能提交你的答案吗?谢谢,
array(5) {
  [0]=>
  array(1) {
    ["william"]=>
    int(8)
  }
  [1]=>
  array(1) {
    ["bill"]=>
    int(1)
  }
  [2]=>
  array(1) {
    ["jake"]=>
    int(6)
  }
  [3]=>
  array(1) {
    ["sara"]=>
    int(7)
  }
  [4]=>
  array(1) {
    ["tara"]=>
    int(10)
  }
}