Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数组的PHP排序元素_Php_Arrays - Fatal编程技术网

数组的PHP排序元素

数组的PHP排序元素,php,arrays,Php,Arrays,我正在使用这种排序来按我需要的方式排列$arr中的数据 它工作得很好,但是,当有超过16个数组时,它似乎丢失了最后一个数组 我认为问题在于数据,但我还没有找到问题的根源 我在使用此阵列时: array ( 0 => array ( 'race_order' => 1, 'heat_nbr' => 4, 'racer_id' => 620, 'heat_finish' => 4, 'race_time' => '120.00', ), 1 => arr

我正在使用这种排序来按我需要的方式排列$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");    
//插入排序
函数sortArr(&$arr){
对于($i=0;$i数组('nbr\u of_semis'=>2,'race\u order'=>1,'heat\u nbr'=>3,'racer\u id'=>1191,'heat\u finish'=>4,'race\u time'=>121.0000',),
1=>数组('nbr\U of_semis'=>2,'race\u order'=>1,'heat\u nbr'=>3,'racer\u id'=>502,'heat\u finish'=>5,'race\u time'=>121.0000',),
2=>数组('nbr\U of_semis'=>2,'race\u order'=>1,'heat\u nbr'=>3,'racer\u id'=>1269,'heat\u finish'=>6,'race\u time'=>121.0000',),
3=>数组('nbr\U of_semis'=>2,'race\u order'=>1,'heat\u nbr'=>3,'racer\u id'=>723,'heat\u finish'=>7,'race\u time'=>121.0000,),
4=>数组('nbr\U of_semis'=>2,'race\u order'=>2,'heat\u nbr'=>1,'racer\u id'=>24,'heat\u finish'=>4,'race\u time'=>130.0000',),
5=>数组('nbr\U of_semis'=>2,'race\u order'=>2,'heat\u nbr'=>1,'racer\u id'=>1006,'heat\u finish'=>5,'race\u time'=>130.0000,),
6=>数组('nbr\U of_semis'=>2,'race\u order'=>2,'heat\u nbr'=>1,'racer\u id'=>625,'heat\u finish'=>6,'race\u time'=>130.0000',),
7=>数组('nbr\U of_semis'=>2,'race\u order'=>2,'heat\u nbr'=>1,'racer\u id'=>1115,'heat\u finish'=>7,'race\u time'=>130.0000',),
8=>数组('nbr\U of_semis'=>2,'race\u order'=>3,'heat\u nbr'=>4,'racer\u id'=>121,'heat\u finish'=>3,'race\u time'=>136.0000',),
9=>数组('nbr\U of_semis'=>2,'race\u order'=>3,'heat\u nbr'=>4,'racer\u id'=>620,'heat\u finish'=>4,'race\u time'=>136.0000',),
10=>数组('nbr\U of_semis'=>2,'race\u order'=>3,'heat\u nbr'=>4,'racer\u id'=>487,'heat\u finish'=>5,'race\u time'=>136.0000,),
11=>数组('nbr\U of_semis'=>2,'race\u order'=>3,'heat\u nbr'=>4,'racer\u id'=>645,'heat\u finish'=>6,'race\u time'=>136.0000,),
12=>数组('nbr_of u semis'=>2,'race_order'=>4,'heat_nbr'=>2,'racer_id'=>379,'heat_finish'=>3,'race_time'=>152.0000',),
13=>数组('nbr\U of_semis'=>2,'race\u order'=>4,'heat\u nbr'=>2,'racer\u id'=>17,'heat\u finish'=>4,'race\u time'=>152.0000',),
14=>数组('nbr\U of_semis'=>2,'race\u order'=>4,'heat\u nbr'=>2,'racer\u id'=>65,'heat\u finish'=>5,'race\u time'=>152.0000',),
15=>数组('nbr\U of_semis'=>2,'race\u order'=>4,'heat\u nbr'=>2,'racer\u id'=>860,'heat\u finish'=>6,'race\u time'=>152.0000,),
16=>数组('nbr\U of_semis'=>2,'race\u order'=>4,'heat\u nbr'=>2,'racer\u id'=>226,'heat\u finish'=>7,'race\u time'=>152.0000,)
);    
$n=计数($arr);
//打印阵列的循环
对于($i=0;$i<$n;$i++)
echo nl2br(“排序顺序:.$i.”比赛顺序:.$arr[$i]['Race\u Order']。”;赛区编号:.$arr[$i]['Heat\u nbr']。“;赛车手:.$arr[$i]['Racer\u id']。”;赛区终点:.$arr[$i]['Heat\u Finish']。“;赛区时间:.$arr[$i]['Race\n”);
//根据参赛者的比赛顺序对其进行分类的回路
$max=0;//用于确定竞态订单最大大小的变量
对于($i=0;$i<$n;$i++){
如果($i==0)
$arr1[]=$arr[$i];
否则{
如果($arr[$i]['race\u order']=$arr[$i-1]['race\u order']))
$arr1[]=$arr[$i];
否则{
索塔尔(1美元);
$arr2[]=$arr1;
如果($max$i)
$arr[]=$arr2[$j][$i];
}    
}    
echo nl2br(“已排序的\n”);
对于($i=0;$i<$n;$i++)
echo nl2br(“排序顺序:.$i.”比赛顺序:.$arr[$i]['Race\u Order']。”;赛区编号:.$arr[$i]['Heat\u nbr']。“;赛车手:.$arr[$i]['Racer\u id']。”;赛区终点:.$arr[$i]['Heat\u Finish']。“;赛区时间:.$arr[$i]['Race\n”);

这里出了问题:

// less than $max
for($i = 0; $i < $max; $i++){
//小于$max
对于($i=0;$i<$max;$i++){
$max是基于$arr1的count()的值,您应该这样做

// less than OR equal to $max
for($i = 0; $i <= $max; $i++){
//小于或等于$max

对于($i=0;$i这里出现了错误:

// less than $max
for($i = 0; $i < $max; $i++){
//小于$max
对于($i=0;$i<$max;$i++){
$max是基于$arr1的count()的值,您应该这样做

// less than OR equal to $max
for($i = 0; $i <= $max; $i++){
//小于或等于$max

对于($i=0;$i),我已经回答了类似的问题:为什么要构建自己的排序函数?为什么不使用一个简单的比较器函数
usort()
?您可能会丢失条目,因为代码中的一个错误导致在执行
$arr[$index]
$arr[$i]时它被覆盖
assignments。试过了。没用。我不明白为什么它可以完美地处理一组数据,而不能处理另一组非常相似的数据。@Alex我很感激,但这不是我需要的。我需要在多个字段上排序。而且不是按自然排序顺序排序。为什么要调用count()在同一个数组上执行了54次?同样,您的错误是否在这里:“for($k=$i+1;”?我已经回答了类似的问题:为什么您要构建自己的排序函数?为什么不使用一个简单的比较器函数来
usort()
?您可能会丢失条目,因为代码中的一个错误导致它在执行
$arr[$index]时被覆盖
$arr[$i]
分配。尝试过。没有效果。我不明白为什么会这样