2012-01-19 22 views
1

我有一个已经排序的数组,但我想给每一行排名。如果有匹配的值,那么它将跳过1,2,2,4,5,5,5,8等级。多维数组中的秩值

它可以potentailly排序在任何列,但在下面的例子中它是排序在a和b上。当数组0和1匹配时,下面的排名是1,1,3。

例阵列

Array 
(
    [0] => Array 
    (
     [rank] => 
     [a] => 5 
     [b] => 4 
     [c] => 1 
    ) 

[1] => Array 
    (
     [rank] => 
     [a] => 5 
     [b] => 4 
     [c] => 9 
    ) 

[2] => Array 
    (
     [rank] => 
     [a] => 3 
     [b] => 25 
     [c] => 9 
    ) 
) 
+1

您是如何计算的排名? –

回答

0

哪里$arr是你的数组:

$prev = null; 

$length = count($arr); 
for($i = 0; $i < $length; $i++) 
{ 
    $sub_arr = array_slice($arr[$i], 1, 2); // keeps array('a' => , 'b' =>) 
    if($prev == null || $sub_arr == $prev) 
    { 
     $arr[$i]['rank'] = $i == 0 ? 1 : $arr[$i - 1]['rank']; 
    } 
    else 
    { 
     $arr[$i]['rank'] = $i + 1; 
    } 
    $prev = $sub_arr; 
} 
+0

谢谢,效果很好 – Matt