PHP排序数组输出

时间:2013-01-09 06:03:27

标签: php sorting multidimensional-array

更新2(玩家差点指数计算)

    $sql3 = "SELECT roundID FROM rounds WHERE userID='$userID'";
    $result3 = mysql_query($sql3) or die(mysql_error());
    $total_rounds = mysql_num_rows($result3);


    //CALCULATE USER HANDICAP INDEX IF TOTAL_ROUNDS > 4
    if($total_rounds > 4){              
        if($total_rounds<7) { $score_count = 1; }
        elseif($total_rounds<9) { $score_count = 2; }
        elseif($total_rounds<11) { $score_count = 3; }
        elseif($total_rounds<13) { $score_count = 4; }
        elseif($total_rounds<15) { $score_count = 5; }
        elseif($total_rounds<17) { $score_count = 6; }
        elseif($total_rounds<18) { $score_count = 7; }
        elseif($total_rounds<19) { $score_count = 8; }
        elseif($total_rounds<20) { $score_count = 9; }
        else { $score_count = 10; }

        $sql2 = "SELECT differential FROM rounds WHERE userID='$userID' ORDER BY date DESC LIMIT 20";
        $result2 = mysql_query($sql2) or die(mysql_error());

        $diff_results = array();
        while($row = mysql_fetch_assoc($result2)){
            $diff_results[] = $row['differential'];
        }

        sort($diff_results);

        $diff_results = array_slice($diff_results, 0, $score_count);

        $handicapIndex = array_sum($diff_results) / $score_count * 0.96;
        $handicapIndex = (floor($handicapIndex * 10)) / 10;

希望这会让你全部了解我如何计算球员差点指数。现在我想向玩家(用户)展示用于计算其索引的回合(订购日期)。

永远感激!

更新(轮次表结构)

    roundID - auto incrementing primary key
    userID - INT
    courseID - INT
    tee - VARCHAR
    differential - FLOAT
    date - DATE

我正在努力开始使用我正在努力实现的这项功能。任何帮助将不胜感激。

我有一组mysql db结果我想按字段差异排序。我将它们从数据库中拉出来:

    $sql4 = "SELECT * FROM rounds WHERE userID='$userID' ORDER BY date DESC LIMIT 20";
    $result4 = mysql_query($sql4) or die(mysql_error());
    $total_rounds = mysql_num_rows($result4);

正如您在上面所看到的,我计算了返回的行,通过这个if-elseif-else语句来计算我需要用不同的css突出显示多少分数:

    if($total_rounds<7) { $score_count = 1; }
    elseif($total_rounds<9) { $score_count = 2; }
    elseif($total_rounds<11) { $score_count = 3; }
    elseif($total_rounds<13) { $score_count = 4; }
    elseif($total_rounds<15) { $score_count = 5; }
    elseif($total_rounds<17) { $score_count = 6; }
    elseif($total_rounds<18) { $score_count = 7; }
    elseif($total_rounds<19) { $score_count = 8; }
    elseif($total_rounds<20) { $score_count = 9; }
    else { $score_count = 10; }

例如,如果$ total_rounds = 16,我的$ score_count将为6。 现在我需要使用16行的这个数据集并用php吐出来,所以我保持我的ORDER BY日期,同时在上面的if-elseif-else语句中应用不同的css格式。计算$ score_count是因为我需要突出显示(也就是应用不同的css)到16行数据集的6个最低分数,同时保持我的日期顺序。

所需的输出看起来像这样(*表示单独的css格式*)。

01-08-2013 - 16

01-07-2012 - 1 *

01-06-2013 - 15

01-05-2012 - 2 *

01-04-2013 - 14

01-03-2012 - 3 *

01-02-2013 - 13

01-01-2012 - 4 *

2012年12月31日 - 12

2012年12月30日 - 5 *

2012年12月29日 - 11

2012年12月28日 - 6 *

2012年12月27日 - 10

2012年12月26日 - 9

2012年12月25日 - 8

12-24-2012 - 7

如果您有任何疑问,请与我们联系。

谢谢

2 个答案:

答案 0 :(得分:0)

我将以$total_rounds = 16我的$score_count would be 6

为例
$total_rounds = 16;
$score_count = 6 // comes from the if-else loop you already have

// now we loop over the result
// the css is applied to every odd result, until $score_count is not 0

$counter = 0;
while( ( $data = mysql_fetch_assoc( $result4 ) ) !== false ) {
    if( ( $counter % 2 ) && $score_count ) {
        echo $data['date']; // apply your css here
    } else {
        echo $data['date'];
    }
    $counter++;
    $score_count--;

}

希望这有帮助。

答案 1 :(得分:0)

您必须遵循以下几个步骤。

1)用得分(差异)对结果进行排序,得到六个得分最低的记录的ids。

$sql4 = "SELECT * FROM rounds WHERE userID='$userID' ORDER BY differential LIMIT 20";
$result4 = mysql_query($sql4) or die(mysql_error());
$total_rounds = mysql_num_rows($result4);

if($total_rounds<7) { $score_count = 1; }
elseif($total_rounds<9) { $score_count = 2; }
elseif($total_rounds<11) { $score_count = 3; }
elseif($total_rounds<13) { $score_count = 4; }
elseif($total_rounds<15) { $score_count = 5; }
elseif($total_rounds<17) { $score_count = 6; }
elseif($total_rounds<18) { $score_count = 7; }
elseif($total_rounds<19) { $score_count = 8; }
elseif($total_rounds<20) { $score_count = 9; }
else { $score_count = 10; }

$idsArray = array();
for($i=0; $i<$score_count; $i++){
    $dets = mysql_fetch_array($result4);
    $idsArray[] = $dets['roundID'];
}

2)循环记录并匹配您在第一步中创建的数组中的id。如果id匹配则应用CSS,否则不适用。

$sql4 = "SELECT * FROM rounds WHERE userID='$userID' ORDER BY date DESC LIMIT 20";
$result4 = mysql_query($sql4) or die(mysql_error());

while($dets = mysql_fetch_array($result4)){
    if(in_array($dets['roundID'], $idsArray)){
        //apply CSS
        //display details here
    }
    else{
        //display details here
    }
}

注意:您应该立即停止使用mysql_ *。专家强烈推荐使用mysqli_ *代替