2011-06-07 100 views
1

我有一个数组,输出的是:删除数组元素和总剩余的元素

Array ( 
    [0] => Array ([week] => 1) 
    [1] => Array ([user] => 1) 
    [2] => Array ([score] => 6) 

    [3] => Array ([week] => 1) 
    [4] => Array ([user] => 15) 
    [5] => Array ([score] => 6) 

    [6] => Array ([week] => 2) 
    [7] => Array ([user] => 1) 
    [8] => Array ([score] => 5) 

    [9] => Array ([week] => 2) 
    [10] => Array ([user] => 15) 
    [11] => Array ([score] => 7) 

如何跌幅为用户1从阵列(这将在星期2取5)最低分数线?我只想从用户1的阵列中删除最小的数字,然后想为用户15做同样的事情(这将在第一周为6)。

然后,我将如何总结数组中的剩余分数?将会有更多的星期数据需要关注,我总是希望每个星期的用户数量都降到最低。

因此,迄今为止,用户1的总分为6至2周,用户15的总分为7至第2周。如果第3周的两个用户的分数较低,则其总数为:用户1 = 11和用户15 = 13.

在此先感谢!

+1

你的阵列构成为有点不同我怎么可以做到。你可以将相关元素分组在一个数组成员之下吗? – alex 2011-06-07 00:22:33

回答

0

假设所有的记录都在3组:

$array = array(/* your data */); 
$count = count($array)/3; 
$lowest = 0; 
$min = PHP_INT_MAX; 
for($i = 0; $i < $count; $i++) 
    { 
    if($array[$i + 1]['user'] == 1) 
     { 
     if($array[$i + 2]['score'] < $min) 
      { 
      $min = $array[$i + 2]['score']; 
      $lowest = $i; 
      } 
     } 
    } 
unset($array[$lowest]); 
unset($array[$lowest + 1]); 
unset($array[$lowest + 2]); 

至少应该给你的想法。

0

你的数组结构是奇怪的。为什么每个数组元素本身都是单数组?像下面的内容会更有意义:

$array_better = array (
    [0] => array (
     ['week'] => 1, 
     ['user'] => 1, 
     ['score'] => 6 
    ), 
    [1] => array (
     ['week'] => 1, 
     ['user'] => 15, 
     ['score'] => 6 
    ), 
    [2] => array (
     ['week'] => 2, 
     ['user'] => 1, 
     ['score'] => 5 
    ), 
    [3] => array (
     ['week'] => 2, 
     ['user'] => 15, 
     ['score'] => 7 
    ) 
) 

但对于这个问题,你会做出更感将是一个$array[$week][$user]结构,像这样:

$array_wu = array (
    [1] => array (
     [1] => 6, 
     [15] => 6 
    ), 
    [2] => array (
     [1] => 5, 
     [15] => 7 
    ) 
) 

(如果您有什么不明白我在这里做,请另外再问我吧)

,你可以有一个$array[$user][$week]结构:

$array_uw = array (
    [1] => array (
     [1] => 6, 
     [2] => 5 
    ), 
    [15] => array (
     [1] => 6, 
     [2] => 7 
    ) 
) 

这尤其会使得它非常容易做你正在尝试做的 - 事实上,它会只需要一 一行代码 声明:

$sum_excl_lowest = (array_key_exists(1, $array_uw) and count($array_uw[1])) ? 
        array_sum($array_uw[1]) - min($array_uw[1]) : 
        0;