假设我有一个如下所示的数组:
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时,作为具有这两个值之间差异的组件,以及值今天的。
我担心的是:
答案 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