• 締切済み

ランキング非対象者のプログラム

週一回の発表で一度受賞(5位まで)するとランキングから除外されるプログラムを作成しようと思います。 現在、会員のポイント数の多い順に表示させて過去一度でも受賞したIDを手動で一個づつ書いてランキングを書き出す際には除外している状態です。 例) if($ID=="ランキングID"){ //何もしない }else{ //ラング受賞者の情報を表示 } しかしこの方法では毎週手動で書かないといけないのと、ランキング受賞者が増えていくのでコードがもの凄く長くなります。 例) if($ID=="ランキングID"||$ID=="ランキングID"||$ID=="ランキングID"||$ID=="ランキングID"||$ID=="ランキングID"||$ID=="ランキングID"||$ID=="ランキングID"||$ID=="ランキングID"||$ID=="ランキングID"){ //何もしない }else{ //ラング受賞者の情報を表示 } ランキング非対称者をMySQLに格納して、ランキング除外者を除外させたランキングを表示する方法はないでしょうか??

みんなの回答

回答No.1

<?php $MAX_COUNT = 5; $MIN = 1; $MAX = 10; $arr = array(); /* FILE_TEXTはPHP 6から。データベースの経験が浅いので, ここではテキストファイルを用いるが, どうにかして配列に格納すること とりあえずdata.txtの中身は ================ 5 7 9 ================== 最終行の空行も重要なので注意 */ $removelist = file("data.txt" ,FILE_IGNORE_NEW_LINES | FILE_TEXT ,null ); print ("RemoveList"); print_r ($removelist); print ("\n"); if($MAX - count($removelist,0) > $MAX_COUNT){ while(count($arr,0) < $MAX_COUNT){ $candidate = mt_rand($MIN,$MAX); if (!in_array(strval($candidate),$arr,true) && !in_array(strval($candidate),$removelist,true) ){ array_push($arr,strval($candidate)); }else{ print ("Removed:" . strval($candidate) . "\n"); print ("Status of Array\n"); print_r($arr); } } print("LastStatus:\n"); print_r($arr); $myFile = "data.txt"; $fh = fopen($myFile, 'a') or die("can't open file"); foreach($arr as $val){ fwrite($fh, $val); fwrite($fh,"\n"); } fclose($fh); }else{ print("failed"); } ?>

Up2
質問者

お礼

ありがとうございます。 お蔭様で作成できました。 遅くなってすいませんでした。またよろしくお願いします。

関連するQ&A