在PHP中对多个数组值进行分组

时间:2013-09-18 03:00:43

标签: php arrays

我需要的是获取问题ID并按小时跟踪用户提交的upvotes。当我尝试从数组中一致地获取数据以用于PHPExcel图表时,我遇到了问题。

我最终得到了这个$ hourlyUpvotesTodayResult []数组,它每小时都有正确的投票数(通过print_r验证),但是我想以这样的方式对它们进行分组,我可以为每个问题做一些事情id显示小时0-24和每小时的总票数“。也许我正在过度思考并错过了一些简单的事情。

另外,请忽略古老的MySQL - 我正在研究一些现有的代码,我知道它已被弃用,我总有一天会更新它:D

while ($todayInfoRow = mysql_fetch_array($todayInfoQuery))
    {
    $issue_entry_id_today = array($todayInfoRow['issue_entry_id']);
    foreach ($issue_entry_id_today as $issue_entry_id_today)
        {
        $todayInfoUpvotes = "SELECT id from $db.$tb2 WHERE date = '".$date."' and issue_entry_id = '".$issue_entry_id_today."' ORDER BY issue_entry_id DESC";
        $todayInfoUpvotesQuery = mysql_query($todayInfoUpvotes)or die(mysql_error());
        $todayInfoUpvotesRow = mysql_num_rows($todayInfoUpvotesQuery);
        $todayInfoResult = array($issue_entry_id_today, $todayInfoUpvotesRow);
        }
    // get votes for individual hours for today 
    for ($hour_today=0; $hour_today<25; $hour_today++)
        {
            $hourlyUpvotesToday = "SELECT id from $db.$tb2 WHERE date = '".mysql_real_escape_string($date)."' AND issue_entry_id = '".$issue_entry_id_today."' AND hour = '".$hour_today."' ORDER BY issue_entry_id DESC";
            $hourlyUpvotesTodayQuery = mysql_query($hourlyUpvotesToday)or die(mysql_error());
            $hourlyUpvotesTodayRow = mysql_num_rows($hourlyUpvotesTodayQuery);
            $hourlyUpvotesTodayResult[] = array('id'=>$issue_entry_id_today, 'upvotes'=>$hourlyUpvotesTodayRow, 'hour'=>$hour);
        } 
    }
//debug print array
print_r($hourlyUpvotesTodayResult);

1 个答案:

答案 0 :(得分:1)

您的代码使用一些额外信息创建数组。而不是制作一个数组:

  

小时数

     
    

ID#

         
      

小时

             
        

      
    
  

你会做出一个导致:

  

ID#

     
    

[小时] - &gt;票

  

这次,ID#将成为关键,您的小时将是X值,您的投票将是Y值(参考基本的X-Y轴图表)。您的数组将更改为:

$hourlyUpvotesTodayResult[$issue_entry_id_today] = array($hour => $hourlyUpvotesTodayRow);

您必须将for语句完全放在上面的foreach语句中。然后,您可以按照您需要的问题编号打印每一个。

不确定PHPExcel但你可以通过基本上相同的foreach {for {}} group-loop来发布这个,这次没有SQL调用,因为它已经在数组中了。

在for()循环之外你可以输入类似的内容:

print "ID number for this issue: " . $issue_entry_id_today . "<br>";

在那个循环中,你有:

print "Hour " . $hour . " produced " . $hourlyUpvotesTodayResult[$issue_entry_id_today][$hour] . " votes.";

你可以将它放入桌子或div或任何你想要的东西。

希望这有帮助。