我的数组设置如下:
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
答案 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个元素..