0

假设我有一个如下所示的数组:

array(100) {
  [0]=>
  array(4) {
    ["player_id"]=>
    string(2) "jk"
    ["date"]=>
    string(10) "2012-11-07"
    ["hits"]=>
    string(4) "1000"
  }
  [1]=>
  array(4) {
    ["player_id"]=>
    string(2) "jk"
    ["date"]=>
    string(10) "2012-11-14"
    ["hits"]=>
    string(4) "2000"
  }
 [2]=>
  array(4) {
    ["player_id"]=>
    string(2) "mc"
    ["date"]=>
    string(10) "2012-11-14"
    ["hits"]=>
    string(4) "1500"
  }
 [3]=>
  array(4) {
    ["player_id"]=>
    string(2) "mc"
    ["date"]=>
    string(10) "2012-11-07"
    ["hits"]=>
    string(4) "2300"
  }

...

这种情况还在继续。所以,基本上我有几个球员,每个球员我有两个约会。我想最终有一个这样的数组:

array(100) {
      ["jk"]=>
      array(2) {
        ["hits_today"]=>
        string(4) "1000"
        ["hits_difference"]=>
        string(5) "-1000"
      }
     ["mc"]=>
      array(2) {
        ["hits_today"]=>
        string(4) "1500"
        ["hits_difference"]=>
        string(4) "-800"
      }
    ..

基本上我想处理第一个数组,知道对于每个玩家我(可能)有两个值,并创建一个数组数组,作为键使用 player_id 和作为组件,这两个值之间的差异与今天的值。

我的担忧是:

  • 处理第一个数组的最佳方法是什么?
  • 如果今天的价值不存在,或者明天的价值不存在,我将如何管理?在处理数组时如何控制它?
4

2 回答 2

0

我需要在输出数组中保留日期,以确定当前计算的日期是 > 还是 < 已经存在的日期,但这是我想出的解决方案:

$array = array(
    array("player_id" => "jk", "date" => "2012-11-07", "hits" => "1000"),
    array("player_id" => "jk", "date" => "2012-11-14", "hits" => "2000"),
    array("player_id" => "mc", "date" => "2012-11-14", "hits" => "1500"),
    array("player_id" => "mc", "date" => "2012-11-07", "hits" => "2300")
);

$output = array();
foreach($array as $k=>$v){
    if(!isset($output[$v['player_id']])){
        $output[$v['player_id']]['hits_today'] = $v['hits'];
        $output[$v['player_id']]['hits_difference'] = 0;
        $output[$v['player_id']]['date'] = $v['date'];
    }elseif($v['date'] < $output[$v['player_id']]['date']){
        $output[$v['player_id']]['hits_difference'] = $output[$v['player_id']]['hits_today'] - $v['hits'];
    }elseif($v['date'] > $output[$v['player_id']]['date']){
        $output[$v['player_id']]['hits_difference'] = $output[$v['player_id']]['hits_today'] - $v['hits'];
        $output[$v['player_id']]['hits_today'] = $v['hits'];
        $output[$v['player_id']]['date'] = $v['date'];
    }
}
echo '<pre>';
print_r($output);
echo '</pre>';
?>
于 2012-11-14T14:25:03.970 回答
0

如果这来自查询,我会这样做:

SELECT player_id,
SUM(IF(`date`='$yesterday', hits, 0)) AS hits_yesterday,
SUM(IF(`date`='$today', hits, 0)) AS hits_today
FROM ...
GROUP BY player_id
于 2012-11-14T14:25:08.047 回答