2017-08-10 131 views
-2

我一直在嘗試一段時間,但仍然,我卡在這裏。其實我需要從平均值中獲得排名。在這裏我的結果根據平均值排名在PHP的

Average   Rank 
    39  39 rank is 1 
    32  32 rank is 1 
    51  51 rank is 1 
    57  57 rank is 1 

我真正需要的是

Average   Rank 
    39    3 
    32    4 
    51    2 
    57    1 

我已經嘗試了幾種方法,但沒有什麼似乎工作。順便說一句這是我的代碼

<?php $avg = ($sumc)/($data['total']); echo number_format((float)$avg, 2, ',', ''); ?> 
 

 
<?php 
 
$array = array($avg); 
 
$i=1; 
 
foreach($array as $key=>$value) 
 
{ 
 
    $max = max($array); 
 
    echo "\n".$max." rank is ". $i."\n"; 
 
    $keys = array_search($max, $array);  
 
    unset($array[$keys]); 
 
    if(sizeof($array) >0) 
 
    if(!in_array($max,$array)) 
 
     $i++; 
 
} 
 
\t \t \t \t \t

,這裏是完整的代碼

<?php $nama_mapel=$ux['nama_mapel']; 
 
$an = mysql_fetch_array(mysql_query("SELECT*FROM mapel where kode_kelas='$kode_kelas' and nama_mapel='$nama_mapel'"))?> 
 
\t \t \t \t \t \t \t \t \t \t \t 
 
<text style="display:none;"><?php if($NILAI_AKHIR!=0){$NILAI_AKHIR4=substr($NILAI_AKHIR/100*4,0,4); echo $NILAI_AKHIR4;} ?></text> 
 
        <tr> 
 
        <td width="5%" class="ki1234" height="auto" valign="center" align="center"><?php echo $no++ ;?></td>      
 
        <td width="40%" class="ki1234" height="auto" valign="center" align="left">&nbsp;<?php echo $mmm['nama'];?></td> 
 
\t \t \t \t \t <td width="10%" class="ki1234" height="auto" valign="center" align="center"><?php echo $nis; ?></td> 
 
\t \t \t \t \t <?php 
 
\t \t \t 
 
\t \t \t $mapelz=mysql_query("SELECT*FROM mapel where kode_kelas='$kode_kelas' and id_tp='$id_tp'"); 
 
\t \t \t $arrg=[]; 
 
\t \t \t while($uxe = mysql_fetch_array($mapelz)){ 
 
\t \t  $id_mapel=$uxe['id_mapel']; 
 
\t \t 
 
//awal nilai akhir// \t \t 
 
$dren = mysql_query("SELECT*FROM nilai_siswa,data_siswa,penilaian_judul where nilai_siswa.id_penilaian_judul=penilaian_judul.id_penilaian_judul and nilai_siswa.nis=data_siswa.nis and nilai_siswa.nis=$nis and penilaian_judul.id_mapel=$id_mapel and penilaian_judul.id_semester='$id_semester' and penilaian_judul.id_tp='$id_tp' order by data_siswa.id_siswa asc"); $jm=mysql_num_rows($dren); $jumlah_tugas=$jm; 
 
if($jm==0){$jumlah="1";} else {$jumlah=$jm; }; 
 
$queryj=mysql_query("SELECT sum(n3_100) as rn3_100 FROM nilai_siswa,penilaian_judul where nilai_siswa.id_penilaian_judul=penilaian_judul.id_penilaian_judul and nilai_siswa.nis=$nis and penilaian_judul.id_mapel=$id_mapel and penilaian_judul.id_semester='$id_semester' and penilaian_judul.id_tp='$id_tp'"); 
 
while($hasil=mysql_fetch_array($queryj)) 
 
{$rn3_100=substr($hasil['rn3_100']/$jumlah,0,5); $RATA_TUGAS=$rn3_100;} 
 

 
$dren = mysql_query("SELECT*FROM nilai_siswa2,data_siswa,penilaian_judul where nilai_siswa2.id_penilaian_judul=penilaian_judul.id_penilaian_judul and nilai_siswa2.nis=data_siswa.nis and nilai_siswa2.nis=$nis and penilaian_judul.id_mapel=$id_mapel and nilai_siswa2.jenis=2 and penilaian_judul.id_semester='$id_semester' and penilaian_judul.id_tp='$id_tp' order by data_siswa.id_siswa asc"); $jm=mysql_num_rows($dren); $jumlah_uh=$jm; 
 
if($jm==0){$jumlah="1";} else {$jumlah=$jm;}; 
 
$queryj=mysql_query("SELECT sum(n_100) as rn_100 FROM nilai_siswa2,penilaian_judul where nilai_siswa2.id_penilaian_judul=penilaian_judul.id_penilaian_judul and nilai_siswa2.nis=$nis and penilaian_judul.id_mapel=$id_mapel and nilai_siswa2.jenis=2 and penilaian_judul.id_semester='$id_semester' and penilaian_judul.id_tp='$id_tp'"); 
 
while($hasil=mysql_fetch_array($queryj)) 
 
{$rn_100=substr($hasil['rn_100']/$jumlah,0,5); $RATA_UH= $rn_100;} 
 

 
$dren = mysql_query("SELECT*FROM nilai_siswa2,data_siswa,penilaian_judul where nilai_siswa2.id_penilaian_judul=penilaian_judul.id_penilaian_judul and nilai_siswa2.nis=data_siswa.nis and nilai_siswa2.nis=$nis and penilaian_judul.id_mapel=$id_mapel and nilai_siswa2.jenis=3 and penilaian_judul.id_semester='$id_semester' and penilaian_judul.id_tp='$id_tp' order by data_siswa.id_siswa asc"); $jm=mysql_num_rows($dren); $jumlah_uts=$jm; 
 
if($jm==0){$jumlah="1";} else {$jumlah=$jm;}; 
 
$queryj=mysql_query("SELECT sum(n_100) as rn_100 FROM nilai_siswa2,penilaian_judul where nilai_siswa2.id_penilaian_judul=penilaian_judul.id_penilaian_judul and nilai_siswa2.nis=$nis and penilaian_judul.id_mapel=$id_mapel and nilai_siswa2.jenis=3 and penilaian_judul.id_semester='$id_semester' and penilaian_judul.id_tp='$id_tp'"); 
 
while($hasil=mysql_fetch_array($queryj)) 
 
{$rn_100=substr($hasil['rn_100']/$jumlah,0,5); $RATA_UTS= $rn_100;} 
 

 
$dren = mysql_query("SELECT*FROM nilai_siswa2,data_siswa,penilaian_judul where nilai_siswa2.id_penilaian_judul=penilaian_judul.id_penilaian_judul and nilai_siswa2.nis=data_siswa.nis and nilai_siswa2.nis=$nis and penilaian_judul.id_mapel=$id_mapel and nilai_siswa2.jenis=4 and penilaian_judul.id_semester='$id_semester' and penilaian_judul.id_tp='$id_tp' order by data_siswa.id_siswa asc"); $jm=mysql_num_rows($dren); $jumlah_us=$jm; 
 
if($jm==0){$jumlah="1";} else {$jumlah=$jm;}; 
 
$queryj=mysql_query("SELECT sum(n_100) as rn_100 FROM nilai_siswa2,penilaian_judul where nilai_siswa2.id_penilaian_judul=penilaian_judul.id_penilaian_judul and nilai_siswa2.nis=$nis and penilaian_judul.id_mapel=$id_mapel and nilai_siswa2.jenis=4 and penilaian_judul.id_semester='$id_semester' and penilaian_judul.id_tp='$id_tp'"); 
 
while($hasil=mysql_fetch_array($queryj)) 
 
{$rn_100=substr($hasil['rn_100']/$jumlah,0,5); $RATA_US= $rn_100;} 
 

 
if(!isset($RATA_TUGAS)){$RATA_TUGAS2=0;}else{$RATA_TUGAS2=$RATA_TUGAS;}; 
 
\t \t \t if(!isset($RATA_UH)){$RATA_UH2=0;}else{$RATA_UH2=$RATA_UH;}; 
 
\t \t \t if(!isset($RATA_UTS)){$RATA_UTS2=0;}else{$RATA_UTS2=$RATA_UTS;}; 
 
\t \t \t if(!isset($RATA_US)){$RATA_US2=0;}else{$RATA_US2=$RATA_US;}; 
 
$jumlahc=($persen['tugas']*$RATA_TUGAS2)/100+($persen['uh']*$RATA_UH2)/100+($persen['uts']*$RATA_UTS2)/100+($persen['us']*$RATA_US2)/100; 
 

 
\t \t \t \t \t \t \t if($jumlah_tugas!=0){$k=1;} else {$k=0;}; 
 
\t \t \t \t \t \t \t if($jumlah_uh!=0){$l=1;} else {$l=0;}; 
 
\t \t \t \t \t \t \t if($jumlah_uts!=0){$m=1;} else {$m=0;}; 
 
\t \t \t \t \t \t \t if($jumlah_us!=0){$n=1;} else {$n=0;}; 
 
\t \t \t \t \t \t \t $JUMLAH_PERSEN1=($persen['tugas']*$k)+($persen['uh']*$l)+($persen['uts']*$m)+($persen['us']*$n); 
 
\t \t \t \t \t \t \t if($JUMLAH_PERSEN1==0){$JUMLAH_PERSEN=1;}else{$JUMLAH_PERSEN=$JUMLAH_PERSEN1;}; 
 
\t \t \t \t \t \t \t $NILAI_AKHIRg=substr(($jumlahc/$JUMLAH_PERSEN)*100,0,5); 
 
$nile= $NILAI_AKHIRg; 
 
$arrg[] = $NILAI_AKHIRg;} ?> 
 
    \t \t \t 
 
     <?php $p = mysql_fetch_array(mysql_query("SELECT * FROM peringkat WHERE kode_kelas='$kode_kelas' and nis='$nis'and id_tp='$id_tp'")); ?> \t 
 
\t \t <text style="display:none;"> <?php $sumc = 0; $output = ""; while($element = array_shift($arrg)){$sumc += $element; $output .= $element; if(sizeof($arrg) > 0){ $output .= " + ";}} echo $output . PHP_EOL;?></text> 
 
\t \t <td width="15%" class="ki1234" height="auto" valign="center" align="center"><?php echo $sumc;?></td> 
 
\t \t <text style="display:none;"><?php $result=mysql_query("SELECT count(*) as total FROM mapel WHERE kode_kelas='$kode_kelas' and kel!=3"); $data=mysql_fetch_assoc($result); echo $data['total'];?></text> 
 
\t \t <td width="15%" class="ki1234" height="auto" valign="center" align="center"><?php $avg = ($sumc)/($data['total']); echo number_format((float)$avg, 2, ',', ''); ?></td> 
 
\t \t <td width="15%" class="ki1234" height="auto" valign="center" align="center"><?php 
 
$array = array($avg); 
 
$i=1; 
 
foreach($array as $key=>$value) 
 
{ 
 
    $max = max($array); 
 
    echo "\n".$max." rank is ". $i."\n"; 
 
    $keys = array_search($max, $array);  
 
    unset($array[$keys]); 
 
    if(sizeof($array) >0) 
 
    if(!in_array($max,$array)) 
 
     $i++; 
 
} 
 
?></td> 
 
\t \t \t \t \t \t \t \t \t 
 
        </tr> 
 
\t \t \t \t <?php }?>

需要你的幫助..任何人..?!

+1

'$ array'只在您發佈的代碼中包含一個元素。有沒有其他(相關)的代碼呢? –

+1

我只能給你的建議是:*先*建立一個數組,*然後*開始輸出一個表格。你現在試圖自己確定一個數字的等級,這總是會是1. –

+0

@Justastudent如何添加另一個元素..?順便說一句,我只是張貼我的大代碼 – Azva

回答

0

從你發佈的內容看來問題是如何對降序的平均值進行排序。

考慮到這一點,你知道,如果你計算在旅途中的平均水平,你必須去整個陣列throuh第一所以這裏的一些片斷,以幫助您:

// Random values I want to calculate the average 
$values = [ 
    1 => [15, 25, 35], 
    2 => [45, 55, 65], 
    3 => [75, 85, 95], 
    4 => [105, 115, 125] 
]; 

$avgs = array(); 
foreach ($values as $key => $value) { 
    $avgs[$key] = array_sum($value)/count($value); // calculate average for each key on the array 
} 

print_r($avgs); 
// Will print: 
// Array 
// (
// [1] => 25 
// [2] => 55 
// [3] => 85 
// [4] => 115 
//) 

arsort($avgs); // sort the array in descending order 
print_r($avgs); 

// Will print: 
//Array 
//(
// [4] => 115 
// [3] => 85 
// [2] => 55 
// [1] => 25 
//) 

所以那裏,如果有你的平均數組排序,因此你有你的「等級」。

ps。關鍵字1,2,3,4只是隨機值,你可以在那裏找到任何東西。

1
<?php $avg = ($sumc)/($data['total']); echo number_format((float)$avg, 2, ',', ''); ?> 

<?php 
$array = array($avg); // useless 
$i=1; 
foreach($array as $key=>$value) // also useless, you never use these variables, and since $array contains only one entry, there is no need to foreach it 
{ 
    $max = max($array); 
    echo "\n".$max." rank is ". $i."\n"; 
    $keys = array_search($max, $array);  
    unset($array[$keys]); 
    if(sizeof($array) >0) 
    if(!in_array($max,$array)) 
     $i++; 
} 

讓我們清理一下:

<?php $avg = ($sumc)/($data['total']); echo number_format((float)$avg, 2, ',', ''); ?> 

<?php 
$max = $avg; // That's actually what you were doing. Cleaning the code makes it obvious, that's all 
echo "\n".$max." rank is ". $i."\n"; 
$keys = array_search($max, $array);  
unset($array[$keys]); 
if(sizeof($array) >0) 
if(!in_array($max,$array)) 
    $i++; 
} 

的代碼還是有錯誤,但我們越糾正越多,其設計上的缺陷出現,並且越少的,因此更正。 在我看來,您應該查看該代碼,設法將所有想要的值存入$ array中,以便然後可以計算出您需要的數據。