转换数组的步长为2

时间:2012-11-14 14:08:12

标签: php arrays

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

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时,作为具有这两个值之间差异的组件,以及值今天的。

我担心的是:

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

2 个答案:

答案 0 :(得分: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>';
?>

答案 1 :(得分: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