从数组中只获取5个元素

时间:2009-07-25 12:53:23

标签: php arrays filter

我的数组设置如下:

array
  'testuri/abc' => 
    array
      'label' => string 'abc' (length=3)
      'weight' => float 5
  'testuri/abd' => 
    array
      'label' => string 'abd' (length=3)
      'weight' => float 2
  'testuri/dess' => 
    array
      'label' => string 'dess' (length=4)
      'weight' => float 2
  'testuri/gdm' => 
    array
      'label' => string 'gdm' (length=3)
      'weight' => float 2
  'testuri/abe' => 
    array
      'label' => string 'abe' (length=3)
      'weight' => float 2
  'testuri/esy' => 
    array
      'label' => string 'esy' (length=3)
      'weight' => float 2
  'testuri/rdx' => 
    array
      'label' => string 'rdx' (length=3)
      'weight' => float 3
  'testuri/tfc' => 
    array
      'label' => string 'tfc' (length=3)
      'weight' => float 3

我希望得到/过滤5个元素的重量'。是否有一个PHP函数来实现这个目标?

PS。我的想法是使用foreach

5 个答案:

答案 0 :(得分:7)

按权重值按降序对数组进行排序,然后得到前五个值:

function cmpByWeight($a, $b) {
    return $b['weight'] - $a['weight'];
}
uasort($array, 'cmpByWeight');
$firstFive = array_slice($array, 0, 5);

答案 1 :(得分:2)

你最好使用uasort一个回调来比较传递值的'weight'索引,然后array_slice来获取前5个元素(或者最后5个元素,具体取决于哪个方式你排序......)

答案 2 :(得分:0)

我会使用array_multisort()然后获取前5个值。

array_multisort($ weight,SORT_DESC,$ label,SORT_ASC,$ YOUR_ARRAY)

然后只需抓住$ YOUR_ARRAY [0] - $ YOUR_ARRAY [4]或迭代数组以获取前5个

[编辑]这里是该功能的链接 - > http://us3.php.net/manual/en/function.array-multisort.php

答案 3 :(得分:0)

据我所知,没有。

你可以使用heap,但是对于5个元素,我不确定它比仅存储前5个要快。

答案 4 :(得分:0)

我的英语不是最好的,我会尽力解释,我需要什么。我可以对数组进行排序....但在上面的示例中,我有以下内容:

1x weight 5
2x weight 3
5x weight 2

所以...如果我抓住前5个元素,另外3个重量为2的元素将被忽略。所以我需要所有5个重量为2的元素....所以我有一个包含7个项目的数组。

另一个例子:

2x weight 5
4x weight 2
7x weight 1

必须忽略所有带weight1的元素,所以我在一个新数组中得到6个元素..