从阵列键php

问题描述:

得到最大的麻烦我有这些数组,我需要做的是让单独的每个数组检查[total],然后得到bigest 5数字。我一直在尝试,但我的头即将爆炸,请帮助!从阵列键php

Array ( 
[0] => Array ([id] => 50 [faceid] => 1508653983 [fname] => Mario [lname] => Zelaya [email] => Email [handicap] => Handicap [province] => Province [country] => Country [gender] => male [hand] => [shot1] => Shot #1 [shot2] => Shot #2 [shot3] => Shot #3 [shot4] => Shot #4 [shot5] => Shot #5 [news] => 1 [total] => 0) 

[1] => Array ([id] => 49 [faceid] => 1665349411 [fname] => Yair [lname] => Villar [email] => [email protected] [handicap] => lefthanded [province] => Buenos Aires [country] => Argentina [gender] => male [hand] => RH [shot1] => 200 [shot2] => 98 [shot3] => 98 [shot4] => 98 [shot5] => 98 [news] => 1 [total] => 592) 

[2] => Array ([id] => 48 [faceid] => 1665349411 [fname] => Yair [lname] => Villar [email] => [email protected] [handicap] => lefthanded [province] => Buenos Aires [country] => Argentina [gender] => male [hand] => RH [shot1] => 500 [shot2] => 250 [shot3] => 80 [shot4] => 30 [shot5] => 20 [news] => 1 [total] => 88000) 

) 

我该怎么做这些与PHP。请帮忙!!

+5

那么......你试了一下? – Tchoupi 2012-07-26 21:05:14

+1

嘿,不要让人们告诉你左手是一个障碍! – SupremeDud 2012-07-26 21:06:00

+0

以及即时尝试建立一个函数来取消设置everythin我不需要,只留下[total]和[userid],然后尝试比较[total]和排序数组desc,然后只打印最后5个 – 2012-07-26 21:10:20

function getTop5(array $data, $high2low = true) 
{ 
    $total = array(); 

    foreach ($data as $val) 
     $total[$val["id"]] = $val["total"]; 

    asort($total); 
    return $high2low ? array_reverse($total) : $total; 
} 

$data = array(
     array("id" => 1, "total" => 25), 
     array("id" => 2, "total" => 32), 
     array("id" => 3, "total" => 21), 
     array("id" => 4, "total" => 28) 
     ); 

print_r(getTop5($data)); 
+0

完美的兄弟,非常感谢你:)你让我的一天大声笑,现在的事情是它只返回总没有ID :(大声笑,但生病了弄明白:)谢谢你真的很好帮助 – 2012-07-26 21:41:09

+0

@YairVillar你的欢迎;)...你可以使用array_keys()来获得这个数组的键,你知道键是ID ... – 2012-07-26 21:45:41

尝试使用PHP的usort函数来排序您的数组:

function cmp($a, $b) 
{ 
    if ($a['total'] == $b['total']) 
     return 0; 

    return ($a['total'] > $b['total']) ? -1 : 1; 
} 

usort($yourarray, "cmp"); 

if (count($yourarray) > 5) 
    $sortedArray = array_slice($yourarray, 0, 5); 
else 
    $sortedArray = $yourarray; 

你最终将与得分最高的5个元素的数组。如果输入数组中的元素少于5个,则最终将获得与输入数组中元素数量相同的元素。

+1

您可以缩短您的' cmp()'返回$ b ['total'] - $ a ['total']'。 – 2012-07-26 21:44:02

+0

同意,但为了清楚起见,cmp的扩展版本有点容易理解:) – Wouter 2012-07-26 21:49:14