我有几个包含团队数据的数组... 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
用于调试,我使用for循环并打印每个的值......所以$Teams[$z] - $ConfNum[$z] - $DivNum[$z]
...等。
我跑array_multisort()
(过去我曾多次使用过这种情况)突然之间的关联不再存在。
这是我的调试。
在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应该是Conf 2 Div 2 ..等我然后运行我的array_multsort:
array_multisort($DivWinner,SORT_DESC,$TeamRank,$Teams,$ConfNum,$DivNum,$SeriesID);
这会将我的DivWinner置于顶部,然后按我的TeamRank排序。我包括Teams,ConfNum,DivNum,SeriesID,因为我想在排序后维护所有这些数组的关联。
排序后我得到了这个:
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
现在我们再来看看10队。
现在设置为Conf 1 Div 1 ...完全不正确。
这是一个DivWinner(设置为1)所以它应该排名"更高"但是,TeamRank是8 ...所以在四个DivWinners中,它应该是最低的...而不是#&#34 39; s排名第二。
答案 0 :(得分:1)
所以......我一直在根据$ Teams数组关联的密钥创建数组...我查找$ Teams [$ z]的ConfNum,DivNum等,并将其插入$ ConfNum [ $ z]数组。
在我执行array_multisort之前,我决定在所有数组上使用print_r ...看,每个数组以不同的顺序打印(因为它们是创建/添加的)。因此,对于10队(这是列表中的第2队),第二个ConfNum确实是1,即使关键的$ z是另一个团队。
当我执行array_multisort时,它没有考虑键,而是根据值添加到每个数组的顺序进行排序。
在我开始使用array_multisort之前,我能够通过对所有数组执行ksort()来解决这个问题。
这样做肯定纠正了我的问题......所有阵列似乎都按照正确的顺序报告了正确的数字。
感谢大家花了一点时间思考我的问题。
答案 1 :(得分: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
或许你的代码在其他地方被窃听。