是否可以将一个Array的字段存储为新数组?

时间:2009-11-11 01:05:08

标签: php cakephp

在我的CakePHP应用程序中,我正在提取一个名为“Timesheets”的表的结果。这张桌子有一个Athle_id和一些比赛的分段次数。与其他运动员相比,我需要对一名运动员进行一些计算(例如,计算最快完成时间和最慢运动时间之间的差异)。

我认为最好的方法是将每个运动员的“完成”存储在一个新阵列中,然后在其上运行min()函数。对于我的生活,我无法让这个工作......

你认为我接近这个错误的方式,还是我只是错过了什么?

foreach ($timesheet['Run'] as $run):
    <tr<?php echo $class;?>>
        <td><?php echo $run['athlete_id'];?></td>
        <td><?php echo $run['start'];?></td>
        <td><?php echo $run['split1'];?></td>
        <td><?php echo $run['split2'];?></td>
        <td><?php echo $run['split3'];?></td>
        <td><?php echo $run['split4'];?></td>
        <td><?php echo $run['split5'];?></td>
        <td><?php echo $run['split6'];?></td>
        <td><?php echo $run['finish'];?></td>
    </tr>
   endforeach

5 个答案:

答案 0 :(得分:1)

假设您从数据库中使用 order by finish asc 获取时间表,您可以执行以下操作(省略拆分以简化):

$fastest = $previous = $timesheet['Run'][0]['finish'];
foreach ($timesheet['Run'] as $run):
    <tr>
        <td><?php echo $run['athlete_id'];?></td>
        <td><?php echo $run['finish'];?></td>
        <td><?php echo $previous - $run['finish'];?></td>
        <td><?php echo $fastest - $run['finish'];?></td>
    </tr>
    $previous = $run['finish'];
endforeach

这应该给出这样的行:

id | finished_in | to_previous  | to_best
1  | 120         | 0            | 0
2  | 121.5       | -1.5         | -1.5
3  | 121.8       | -0.3         | -1.8
4  | 122.6       | -0.8         | -2.6
...

另一种选择是将返回的数组包装到Object或ArrayIterator中,然后在里面执行calulcations,封装$ faster和$ previous以及你可能想要计算的任何其他内容。

答案 1 :(得分:0)

我假设你在foreach周围有一个合适的标签和';'在endforeach之后。

所以问题变成你可以访问$ timesheet ['Run'] [0] ['athlete_id']吗?您可以使用print_r()来确保$ timesheet符合您认为的格式。

答案 2 :(得分:0)

我会考虑使用像usort这样的东西。您可以定义一个回调函数,通过'finish'键对$ timesheet ['Run']数组进行排序。最后,如果正确定义,数组中的第一个条目将具有最短的完成时间。

例如:

function cmp($a, $b)
{
   if ($a['finish'] == $b['finish'])
   { 
      return 0;
   }

   return ($a['finish'] < $b['finish']) ? -1 : 1;
}

usort($timesheet['Run'], "cmp");

答案 3 :(得分:0)

我建议在控制器和SQL中进行计算和排序。

答案 4 :(得分:0)

在我看来,您需要更改存储数据的方式。 尝试创建包含id,event_id,athlete_id和time的表,这将使您的应用程序更灵活,计算更容易。