2009-11-11 3 views
3

내 CakePHP 앱에서 'Timesheets'테이블 결과를 가져오고 있습니다. 이 테이블에는 athlete_id와 경주 시간이 몇 번 있습니다. 한 선수의 시간에 다른 운동 선수와 비교 한 계산이 필요합니다 (예 : 가장 빠른 종료 시간과 가장 느린 시간의 차이를 계산).한 배열의 필드를 새로운 배열로 저장할 수 있습니까?

나는 이것을하기위한 가장 좋은 방법은 모든 선수의 'finish'를 새로운 배열에 저장 한 다음 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 
+4

코드 스 니펫과 설명은 완전히 별개의 것으로 보입니다. – seanmonstar

+1

그래, 어떻게하려고하는지 보여주는 코드를 넣어주세요. – pablasso

답변

1

, 당신은이 같은 (간결 분할 생략)을 할 수

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로 랩핑하고 $ fastest와 $ previous를 캡슐화하고 계산할 수있는 다른 것들을 캡슐화하는 것입니다.

0

foreach와 관련하여 적절한 태그가 있다고 가정합니다. ';' endforeach 후에.

그래서 $ timesheet [ 'Run'] [0] [ 'athlete_id']에 액세스 할 수 있습니까? print_r()을 사용하여 $ timesheet가 있다고 생각하는 형태인지 확인할 수 있습니다.

0

나는 usort과 같은 것을 사용할 것입니다. 'times'[ 'Run'] 배열을 'finish'키로 정렬하기 위해 콜백 함수를 정의 할 수 있습니다. 결국 배열의 첫 번째 항목이 올바르게 정의 된 경우 최단 완료 시간을 갖게됩니다. 예를 들어

:

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

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

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

나도 계산을하고 컨트롤러와 SQL에 정렬하는 것이 좋습니다. 이 같은 행을 제공해야

$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 

: 데이터베이스에서 마무리 오름차순에 의해 주문 시간표를 가져 오는하는 가정

0

제 의견으로는 데이터를 저장하는 방식을 변경해야합니다. id, event_id, athlete_id 및 시간을 포함하는 테이블을 만들어보십시오. 그러면 응용 프로그램의 유연성과 계산이 더 쉬워집니다.

관련 문제