我正在使用这种方式来安排$ arr中的数据我是如何需要它的。
它的效果非常好,但是当它超过16时它似乎失去了最后一个数组。
我认为问题出在数据上,但我还没有找到问题的根源。
当我使用这个数组时:
array (
0 => array ( 'race_order' => 1, 'heat_nbr' => 4, 'racer_id' => 620, 'heat_finish' => 4, 'race_time' => '120.00', ),
1 => array ( 'race_order' => 1, 'heat_nbr' => 4, 'racer_id' => 645, 'heat_finish' => 5, 'race_time' => '120.00', ),
2 => array ( 'race_order' => 1, 'heat_nbr' => 4, 'racer_id'=> 487, 'heat_finish' => 6, 'race_time' => '120.00', ),
3 => array ( 'race_order' => 2, 'heat_nbr' => 3, 'racer_id' => 857, 'heat_finish' => 4, 'race_time' => '160.00', ),
4 => array ( 'race_order' => 2, 'heat_nbr' => 3, 'racer_id'=> 1191, 'heat_finish' => 5, 'race_time' => '160.00', ),
5 => array ( 'race_order' => 2, 'heat_nbr' => 3, 'racer_id' => 1269, 'heat_finish' => 6, 'race_time' =>'160.00', ),
6 => array ( 'race_order' => 2, 'heat_nbr' => 3, 'racer_id'=> 723, 'heat_finish' => 7, 'race_time' => '160.00', ),
7 => array ( 'race_order' => 3, 'heat_nbr' => 2, 'racer_id' => 245, 'heat_finish' => 3, 'race_time' =>'180.0000', ),
8 => array ( 'race_order' => 3, 'heat_nbr' => 2, 'racer_id'=> 65, 'heat_finish' => 4, 'race_time' => '180.0000', ),
9 => array ( 'race_order' => 3, 'heat_nbr' => 2, 'racer_id' => 269, 'heat_finish' => 5, 'race_time' =>'180.0000', ),
10 => array ( 'race_order' => 3, 'heat_nbr' => 2,'racer_id' => 860, 'heat_finish' => 6, 'race_time' => '180.0000', ),
11 => array ('race_order' => 3, 'heat_nbr' => 2, 'racer_id' => 226, 'heat_finish' => 7,'race_time' => '180.0000', ),
12 => array ( 'race_order' => 4, 'heat_nbr'=> 1, 'racer_id' => 24, 'heat_finish' => 3, 'race_time' => '240.00', ),
13 => array ('race_order' => 4, 'heat_nbr' => 1, 'racer_id' => 1006, 'heat_finish' =>4, 'race_time' => '240.00', ),
14 => array ( 'race_order' => 4, 'heat_nbr'=> 1, 'racer_id' => 625, 'heat_finish' => 5, 'race_time' => '240.00', ),
15 => array ('race_order' => 4, 'heat_nbr' => 1, 'racer_id' => 1115, 'heat_finish' =>6, 'race_time' => '240.00', ),
16 => array ( 'race_order' => 4, 'heat_nbr'=> 1, 'racer_id' => 1208, 'heat_finish' => 7, 'race_time' => '240.00', ),
);
它按预期工作。随着下面代码中包含的数组,我输了:
16 => array ( 'race_order' => 4, 'heat_nbr'=> 1, 'racer_id' => 1208, 'heat_finish' => 7, 'race_time' => '240.00', ),
我看不出有充分的理由。
//the insertion sort
function sortArr(&$arr){
for($i = 0; $i<count($arr); $i++){ //loop that iterates through the array indexes
//set the current index as the current minimum
$index = $i;
$posOfMin = $arr[$i];
for($k = $i+1; $k < count($arr); $k++){ //loop that iterates from the current index to the array end to find the smallest heat_finish value
if($arr[$k]['heat_finish'] < $arr[$index]['heat_finish']){ //if a value smaller than the current assumed minimum is found, that value will be set as the current minimum
$index = $k;
$posOfMin = $arr[$k];
}
}
//swaps the position of the current index and the current minimum
$arr[$index] = $arr[$i];
$arr[$i] = $posOfMin;
}
}
$arr = array (
0 => array ( 'nbr_of_semis' => 2, 'race_order' => 1, 'heat_nbr' => 3, 'racer_id' => 1191, 'heat_finish' => 4, 'race_time' => '121.0000', ),
1 => array ( 'nbr_of_semis' => 2, 'race_order' => 1, 'heat_nbr' => 3, 'racer_id' => 502, 'heat_finish' => 5, 'race_time' => '121.0000', ),
2 => array ( 'nbr_of_semis' => 2, 'race_order' => 1, 'heat_nbr' => 3, 'racer_id' => 1269, 'heat_finish' => 6, 'race_time' => '121.0000', ),
3 => array ( 'nbr_of_semis' => 2, 'race_order' => 1, 'heat_nbr' => 3, 'racer_id' => 723, 'heat_finish' => 7, 'race_time' => '121.0000', ),
4 => array ( 'nbr_of_semis' => 2, 'race_order' => 2, 'heat_nbr' => 1, 'racer_id' => 24, 'heat_finish' => 4, 'race_time' => '130.0000', ),
5 => array ( 'nbr_of_semis' => 2, 'race_order' => 2, 'heat_nbr' => 1, 'racer_id' => 1006, 'heat_finish' => 5, 'race_time' => '130.0000', ),
6 => array ( 'nbr_of_semis' => 2, 'race_order' => 2, 'heat_nbr' => 1, 'racer_id' => 625, 'heat_finish' => 6, 'race_time' => '130.0000', ),
7 => array ( 'nbr_of_semis' => 2, 'race_order' => 2, 'heat_nbr' => 1, 'racer_id' => 1115, 'heat_finish' => 7, 'race_time' => '130.0000', ),
8 => array ( 'nbr_of_semis' => 2, 'race_order' => 3, 'heat_nbr' => 4, 'racer_id' => 121, 'heat_finish' => 3, 'race_time' => '136.0000', ),
9 => array ( 'nbr_of_semis' => 2, 'race_order' => 3, 'heat_nbr' => 4, 'racer_id' => 620, 'heat_finish' => 4, 'race_time' => '136.0000', ),
10 => array ( 'nbr_of_semis' => 2, 'race_order' => 3, 'heat_nbr' => 4, 'racer_id' => 487, 'heat_finish' => 5, 'race_time' => '136.0000', ),
11 => array ( 'nbr_of_semis' => 2, 'race_order' => 3, 'heat_nbr' => 4, 'racer_id' => 645, 'heat_finish' => 6, 'race_time' => '136.0000', ),
12 => array ( 'nbr_of_semis' => 2, 'race_order' => 4, 'heat_nbr' => 2, 'racer_id' => 379, 'heat_finish' => 3, 'race_time' => '152.0000', ),
13 => array ( 'nbr_of_semis' => 2, 'race_order' => 4, 'heat_nbr' => 2, 'racer_id' => 17, 'heat_finish' => 4, 'race_time' => '152.0000', ),
14 => array ( 'nbr_of_semis' => 2, 'race_order' => 4, 'heat_nbr' => 2, 'racer_id' => 65, 'heat_finish' => 5, 'race_time' => '152.0000', ),
15 => array ( 'nbr_of_semis' => 2, 'race_order' => 4, 'heat_nbr' => 2, 'racer_id' => 860, 'heat_finish' => 6, 'race_time' => '152.0000', ),
16 => array ( 'nbr_of_semis' => 2, 'race_order' => 4, 'heat_nbr' => 2, 'racer_id' => 226, 'heat_finish' => 7, 'race_time' => '152.0000', )
);
$n = count($arr);
//loop that prints the array
for($i = 0; $i < $n; $i++)
echo nl2br("Sort Order:". $i ." Race Order:" . $arr[$i]['race_order'] . "| Heat Number:" . $arr[$i]['heat_nbr'] . "| Racer:" . $arr[$i]['racer_id'] . "| Heat Finish:" . $arr[$i]['heat_finish'] . "| Race Time:" . $arr[$i]['race_time']."\n");
//loop that separates and sorts the racers according to their race_order
$max = 0; //variable that will use to determine the maximum size of race_order
for($i = 0; $i < $n; $i++){
if($i == 0)
$arr1[] = $arr[$i];
else{
if($arr[$i]['race_order'] == $arr[$i-1]['race_order'])
$arr1[] = $arr[$i];
else{
sortArr($arr1);
$arr2[] = $arr1;
if($max < count($arr1))
$max = count($arr1);
unset($arr1);
$arr1[] = $arr[$i];
}
}
}
$arr2[] = $arr1;
//destroy the current array
unset($arr);
//loop to combine the sorted arrays
for($i = 0; $i < $max; $i++){
for($j = 0; $j < count($arr2); $j++){
if(count($arr2[$j]) > $i)
$arr[] = $arr2[$j][$i];
}
}
echo nl2br("Sorted\n");
for($i = 0; $i < $n; $i++)
echo nl2br("Sort Order:". $i ." Race Order:" . $arr[$i]['race_order'] . "| Heat Number:" . $arr[$i]['heat_nbr'] . "| Racer:" . $arr[$i]['racer_id'] . "| Heat Finish:" . $arr[$i]['heat_finish'] . "| Race Time:" . $arr[$i]['race_time']."\n");
答案 0 :(得分:3)
这里出错:
hh:mm:ss
$ max是一个基于$ arr1的count()的值,你应该这样做
like
否则它永远不会解析最后一个值,就像这里发生的一样。 :)