2014-07-21 8 views
2

팀 데이터가 포함 된 배열이 여러 개 있습니다 ... array_multisort()은 팀 데이터 연결을 유지하지 않는 것으로 보입니다. 나는 이런 식으로 뭔가가 : 디버깅을위한array_multisort가 잘못되었습니다. 정렬이 잘못되었습니다.

Teams[$z] = various strings 
ConfNum[$z] = various strings 
$DivNum[$z] = various strings 
$DivWinner[$z] = integer of 1 or 0. 
$TeamRank[$z] = integer of the team's rank 

를, 내가 array_multisort()을 실행

등 ... 루프를 사용하여 각각의 값 ... 그래서 $Teams[$z] - $ConfNum[$z] - $DivNum[$z]를 인쇄 (나는 이것을 사용했습니다 과거에는 여러 번) 갑자기 협회는 더 이상 존재하지 않습니다.

여기에 제 디버깅이 있습니다.

는 array_multisort 전 :

key - Teams - Conf - Div - Rank - DivWin - Series 
z:0 - 3 - 2 - 2 - 0 - 1 -  1 
z:1 - 10 - 2 - 7 - 8 - 1 -  2 
z:2 - 75 - 2 - 2 - 2 - 0 -  3 
z:3 - 11 - 2 - 2 - 5 - 0 -  4 
z:4 - 55 - 1 - 1 - 1 - 1 -  5 
z:5 - 79 - 1 - 6 - 3 - 1 -  6 
z:6 - 67 - 1 - 6 - 4 - 0 -  7 
z:7 - 4 - 1 - 1 - 6 - 0 -  8 

주의 Z : 1 ... 팀 10해야 컨퍼런스 2 사업부 2 등 .. 그때 내 array_multsort를 실행할 수 :

array_multisort($DivWinner,SORT_DESC,$TeamRank,$Teams,$ConfNum,$DivNum,$SeriesID); 

이가두고 내 DivWinners가 맨 위에오고 내 TeamRank별로 정렬됩니다. 팀, ConfNum, DivNum, SeriesID를 포함합니다. 정렬 후 모든 배열에 대한 연결을 유지하려고합니다. 지금 우리가 가서 다시 팀 (10)를 보면 그래서

key - Teams - Conf - Div - Rank - DivWin - Series 
z:0 - 3 - 2 - 2 - 0 - 1 -  1 
z:1 - 10 - 1 - 1 - 1 - 1 -  2 
z:2 - 11 - 1 - 6 - 3 - 1 -  4 
z:3 - 4 - 2 - 7 - 8 - 1 -  8 
z:4 - 75 - 2 - 2 - 2 - 0 -  3 
z:5 - 55 - 1 - 6 - 4 - 0 -  5 
z:6 - 79 - 2 - 2 - 5 - 0 -  6 
z:7 - 67 - 1 - 1 - 6 - 0 -  7 

:

는 정렬 후 나는이 얻을.

이제 Conf 1 Div 1 ...로 잘못 설정되었습니다. 완전히 잘못되었습니다.

DivWinner (1로 설정)이므로 "높은"순위를 가져야합니다. 그러나 TeamRank는 8 ... 4 명의 DivWinners 중 가장 낮은 숫자 여야합니다 ... 대신 2 위입니다.

+0

'$ Teams'는 정렬되지만'$ Team'이 출력됩니다. 오식? – Fabricator

+0

@ Fabricator 만약 당신이이 부분을 언급한다면 : "주의하십시오. z : 1 ... 팀 10은 Conf 2 Div 2 여야합니다." "팀"이라고 말하면, 오타가 아닙니다. 팀은 오프 캐리 (off-the-cuff)를 변화시킵니다. 코드를 두 번 확인했는데 실제로 모든 예제에서 사용 된 $ Teams입니다. –

+0

'디버깅을 위해, 나는 for 루프를 사용하여 각 값을 출력한다. 그래서 $ Team [$ z] - $ ConfNum [$ z] - $ DivNum [$ z] ... 등등 ' – Fabricator

답변

0

정렬 된 배열을 인쇄하는 방식에 버그가 있다고 생각합니다. 여기에 제가 시도한 것이 작동하는 것 같습니다.

<?php 
$Teams = array(3,10,75,11,55,79,67,4); 
$ConfNum = array(2,2,2,2,1,1,1,1); 
$DivNum = array(2,7,2,2,1,6,6,1); 
$DivWinner = array(1,1,0,0,1,1,0,0); 
$rank = array(0,8,2,5,1,3,4,6); 
$series = array(1,2,3,4,5,6,7,8); 

array_multisort($DivWinner,SORT_DESC,$Teams,$ConfNum,$DivNum, $rank, $series); 


?><table> 
<tr> 
<th>teams</th> 
<th>conf</th> 
<th>div</th> 
<th>rank</th> 
<th>winner</th> 
<th>series</th> 
</tr> 
<tbody> 
<?php for($i = 0;$i < count($Teams); $i++):?> 
    <tr> 
    <td><?php echo $Teams[$i]?></td> 
    <td><?php echo $ConfNum[$i]?></td> 
    <td><?php echo $DivNum[$i]?></td> 
    <td><?php echo $rank[$i]?></td> 
    <td><?php echo $DivWinner[$i]?></td> 
    <td><?php echo $series[$i]?></td> 
    </tr> 
<?php endfor;?> 
 
teams conf div rank winner series 
3  2  2 0  1  1 
10 2  7 8  1  2 
55 1  1 1  1  5 
79 1  6 3  1  6 
4  1  1 6  0  8 
11 2  2 5  0  4 
67 1  6 4  0  7 
75 2  2 2  0  3 

또는 어쩌면 당신의 코드는 다른 곳 도청된다.

+1

각 배열의 print_r을 다시 한 번 살펴 보았습니다 ... 입력 된 순서대로 정렬되었으므로 1, 4, 2 등의 키가 1, 2, 3이 아닙니다 ... 제가해야 할 일이있을 것 같습니다 array_multisort 앞의 ksort (아래의 대답에 나와 있습니다). 코드를 다시 확인해 주셔서 감사합니다. :) –

1

그래서 $ Teams 배열에서 연결된 키를 기반으로 배열을 생성했습니다 ... $ Teams [$ z]에 대해 ConfNum, DivNum 등을 조회하여 $ ConfNum에 삽입합니다. [$ z] 배열.

array_multisort ... lo를 수행하기 전에 모든 배열에서 print_r을 사용하기로 결정했습니다. 각 배열은 다른 순서로 인쇄됩니다 (작성/추가 된대로). 따라서 10 번째 팀 (목록의 2 번째 팀)의 경우 $ z가 다른 팀에 속했지만 두 번째 ConfNum은 실제로 1입니다.

array_multisort를 수행 할 때 키를 고려하지 않고 각 배열에 값이 추가 된 순서에 따라 정렬했습니다.

array_multisort로 시작하기 전에 모든 배열에서 ksort()를 수행하여이 문제를 해결할 수있었습니다.

내 문제가 확실히 수정되었습니다. 모든 배열이 정확한 숫자와 올바른 순서로보고되고있는 것으로 보입니다.

내 문제에 대해 생각할 시간이 조금이라도 걸린 모든 분들께 감사드립니다.