• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ランキングリストを作りたいんですが・・・)

初心者でも分かりやすいランキングリストの作り方

noname#25358の回答

  • ベストアンサー
noname#25358
noname#25358
回答No.1

 こういうのはどうでしょう?  @data には、   $data[0] = "www,2,www,www";   $data[1] = "www,1,www,www";   $data[2] = "www,4,www,www";   $data[3] = "www,3,www,www";  というデータが入っているものとし、 foreach ( @data ) {   ($name,$lv,$hp,$gp) = split(/,/,$_);   $_ = "$lv,$name,$hp,$gp"; } @data = sort { $a <=> $b } @data; foreach ( @data ) {   ($lv,$name,$hp,$gp) = split(/,/,$_);   $_ = "$name,$lv,$hp,$gp"; }  あまりスマートなロジックじゃないですけど、これで $lv 順になります。  昇順と降順を入れ替えるときは sort 関数の $a と $b を逆にします。 (見栄えのためにタブ文字を全角スペースにしてますので、コピーペーストするときはご注意を)

AKIRAGOO
質問者

お礼

早速の御指導ありがとうございます。 教えて頂いたスクリプトを利用して、   $data[0] = "www,2,www,www";   $data[1] = "www,1,www,www";   $data[2] = "www,4,www,www";   $data[3] = "www,3,www,www"; の内容表示を、 local($data) = @_; $data =~ s/\n$//; foreach ( @data ) {   ($name,$lv,$hp,$gp) = split(/,/,$_);   $_ = "$lv,$name,$hp,$gp"; } @data = sort { $a <=> $b } @data; foreach ( @data ) {   ($lv,$name,$hp,$gp) = split(/,/,$_);   $_ = "$name,$lv,$hp,$gp"; } としたんですが、何故か『$data[2]にはいってるデータ内容』だけが、$data[0]~$data[3] の分だけ出力されてしまいました・・・。 うまく説明できないんですが、   $data[2] = "www,4,www,www";   $data[3] = "www,3,www,www";   $data[0] = "www,2,www,www";   $data[1] = "www,1,www,www"; の順に出すはずが、出力されたのが $data[2] = "www,4,www,www" $data[2] = "www,4,www,www" $data[2] = "www,4,www,www" $data[2] = "www,4,www,www" になってしまったんです。 どこを修正したらよいのか教えて頂けないでしょうか? よろしくお願いします。

関連するQ&A

  • 掲示板CGIで古い順ではなく新着順で表示させたい

    【CGI名】簡易データベース 【配布先】http://www.rescue.ne.jp/cgi/database/(cgirescue) 仕様では古い順に表示されるのですが、 それを新着順で表示したいのです。 以下の部分を編集すれば良いと思うのですが、どなたかお願いしますm(__)m もし、この部分以外の変更が必要な場合は、大変ご面倒ですが、 上記サイトからダウンロードお願いします。 宜しくお願いします。 foreach $data (@NEW) { ($d,$DATE,$NAME,$EMAIL,$SEX,$AGE,$HANDLE,$PREF,$REM) = split(/\,/,$data); print "<tr>\n"; print "<td nowrap>$DATE</td>\n"; print "<td nowrap>$NAME</td>\n"; print "<td nowrap><a href=\"mailto:$EMAIL\">$EMAIL</a></td>\n"; print "<td nowrap><center>$SEX</center></td>\n"; print "<tdnowrap><center>$AGE</center></td>\n"; print "<td nowrap>$HANDLE</td>\n"; print "<td nowrap>$PREF</td>\n"; print "<td>$REM</td>\n"; print "</tr>\n"; }

    • ベストアンサー
    • CGI
  • mysql内データ一覧表示

    for文を使用し、データ一覧を出しています。 ソースは for ($i = 0; $i < 10; $i ++) { if($row = mysql_fetch_array($result)) { $name1 = $row['name1']; $name2 = $row['name2']; $names .= '<tr>'."\n"; $names .= '<td>' .$name1. '</td>'."\n"; $names .= '<td>' .$name2. '</td>'."\n"; $names .= '</tr>'."\n"; } } echo $names; としています。 データベース内に内容10個あればもちろん10個表示されます。 例えば8個しか内容がない場合は8個表示されるのですが、残りの2個を空の<tr>~</tr>で埋めたいのですが、どのように記述したらよろしいでしょうか? 例は8個目までは <tr> <td>$name1の値</td> <td>$name2の値</td> </tr> 8個目以降は <tr> <td></td> <td></td> </tr> としたいです。 宜しくおねがいします。

    • ベストアンサー
    • PHP
  • メイプルストーリーのランキングについて

    メイプルストーリーのランキングについて あのランキングはどういう順番で付けられているのでしょうか? 200lvより197lvの方が上にいることからlv順で無いのはわかります 経験値順と言う意見も聞いたのですが 200lvまでの獲得経験値は固定なことから獲得経験値順=lv順ということにならないでようか? 一日の獲得経験値だとバラバラになってしまいますし… 詳しくわかる方お願いします

  • データ

    データが送れているのかをプリントで確かめたのですが、$xの値しか表示されません。 セレクトボタンで選択した値が代入できません。 データが送られていないのでしょうか? どこが間違っているのか教えてください。 #!c:/perl/bin/perl <<省略>> print "<table border=1>"; print "<tr><td>商品番号</td><td>商品名</td><td>価格</td>"; print "<td>残り個数</td><td>注文数</td></tr>"; open(RF,"<butu.dat"); while(<RF>){ @data=split; print "<tr><td>$data[0]</td><td>$data[1]</td><td>$data[2]円</td>"; print "<td>$data[3]個</td><td><select name='ko[$n]'>"; for($i=1;$i<=$data[3];$i++){ print "<option value=$i>$i</option>"; } print "</select></td></tr>"; $n++; } close(RF); print "</table><br><br><input type='hidden' value='$n' name='gyo'>"; <<省略>> exit; ↓↓↓ #!c:/perl/bin/perl print "Content-type: text/html\n\n"; require 'cgi-lib.pl'; &ReadParse(\%in); $x=$in{'gyo'}; for($n=0;$n<$x;$n++){ $d[$n]=$in{'ko[$n]'}; } <<省略>> exit;

    • ベストアンサー
    • Perl
  • チェックボックスの値を表示したい

    チェックボックスの値が1のときチェックボックスにチェックが入っているようにしたいです。 データはこんな感じです。 1,1020,2006/9/14,E,1 最後の1がチェックボックスの値です。 上記のデータは@txtに格納しています。 foreach (@txt) { ($rec_id, $tonum, $c_date, $c_status, $chkbox) = split(/,/, $_); $name = &num_to_name($tonum); $html .= "<tr><td>$rec_id</td><td>$tonum</td><td>$name</td><td>$c_date</td><td>$c_status</td><td><input type=checkbox name=chkbox value=\"$chkbox\"></td></tr>"; } htmlとして出力してもチェックボックスにチェックが入っていません。 valueにはやはりcheckedみたいに入れないと入らないのでしょうか? ちなみにこの1はチェックボックスにチェックを入れ、書き込みしたら1が保存されました。なので、valueが1ならばチェックされると思ったのですが・・・。

    • ベストアンサー
    • Perl
  • うまく変数を当てられない?

    フォーム部分を作成中です。 画像が設定されたフォルダにあり、それを選択すると言うことをしたいと思っています。また、以下は修正画面です。 ディレクトリ内のファイルを読み込みoptionに設定ですよね。で、以下のようにやってみました。 foreach $line (@data) { ($nt1,$nc1,$nt2,~~) = split(/<>/,$line); chomp; $e_nt1 = $nt1; $e_nc1 = $nc1;     ~~ } #繰り返し用ナンバー設定 $no = 0; #以下を6回繰り返し while($no<6){ $no++; print "<TR>\n"; print "<TD rowspan=\"3\" bgcolor=\"#999999\"></TD>\n"; print "<TD>\n"; #select開始 print "<SELECT size=\"1\" name=\"nt$no\">\n"; #ディレクトリオープン opendir(DIR , $celdir);  while($view = readdir(DIR)){ # $viewの内容と過去データが一緒なら「selected」をつける   if($view eq ${"nt$no"}){$sel = selected;}    print "<OPTION value=\"$view\" $sel>$view</OPTION>\n";  } print "</SELECT></TD></TR>\n"; print "<TR>\n"; print "<TD><IMG src=\"../../image/menu/${\"e_nt$no\"}\"></TD>\n"; print "</TR>\n"; print "<TR>\n"; print "<TD><INPUT type=\"text\" name=\"nc$no\" size=\"60\" value=\"${\"e_nc$no\"}\"></TD>\n"; print "</TR>\n"; print "<TR>\n"; print "<TD></TD>\n"; print "<TD><BR>\n"; print "</TD>\n"; print "</TR>\n"; } これで、以前選んだ画像名には「selected」が付くと思ったのですが、ファイルが無い「..」と「.」と言うものに「selected」が付いています。 これはどう修正したらいいでしょうか?

  • phpで名簿データを出力

    名簿データを開き、一枠に番号・名前・住所・電話・メールを書き出し一列に4名分のデータを並べます。 CGIだと以下の様なイメージかと思いますが、今回はPHPで書くように指示されました。 勉強不足で月曜迄に出来る気がしません。どのように書けば良いかご教示よろしくお願いします。 open (IN,"meibo.txt"); @abc = <IN>; close (IN); print = "<table border=1><tr>\n"; foreach (@abc) {($id,$name,$address,$tel,$mail) = split(/<>/); print <<HTML; <td>$id<br>$name<br>$address<br>$tel<br>$mail</td> HTML $count++; if ($count > 4){print = "</tr><tr>\n"; $count = 0;} } print = "</tr></table>\n";

    • ベストアンサー
    • PHP
  • CGIのカスタマイズについて

    ネットレスキューさんの簡易データベースについて search.cgiの表示部分でテーブルを一つずつ生成させようと思ったのですがエラーが出ます。 どこが悪いのでしょうか? ----------ここから------- foreach $data (@NEW) { ($d,$DATE,$PREF,$NAME,$EMAIL,$HURL,$AGE,$HANDLE,$REM) = split(/\,/,$data); print "<table width="450" border="0" cellspacing="0" cellpadding="0" class="p12_16">\n"; print "<tr>\n"; print "<td colspan="2" bgcolor="#CC0033" height="14"><font color="#FFFFFF">● $NAME</font></td>\n"; print "</tr>\n"; print "<tr>\n"; print "<td width="70">地域</td>\n"; print "<td width="380">$PREF</td>\n"; print "</tr>\n"; print "<tr>\n"; print "<td height="14">Eメール</td>\n"; print "<td><a href=\"mailto:$EMAIL\">$EMAIL</a></td>\n"; print "</tr>\n"; ---中略---- print "<td height="14">内容</td>\n"; print "<td>$REM</td>\n"; print "</tr>\n"; print "</table>\n"; if ($next_num ne '') { while (($key,$val) = each %FORM2) { if ($key ne 'FF') { $buf = "$buf&$key=$val"; } } print "<h3>↓<a href=\"search.cgi?$buf&FF=$next_num\">次の$page件</a></h3>\n"; } } print "</body></html>\n\n"; exit; --------------ここまで----- splitの扱い方が良く分っていません。 御存知の方御指導下さいませ。

    • ベストアンサー
    • CGI
  • 不明の「1」が出る。

    CGIファイルを実行させると必ずといっていいほど、最後に「1」が表れます。 これは一体何なのでしょうか? なぜ出てくるのでしょうか? 現在以下のようなものを作成したのですが、 if条件であってたばあい、表示されたときに、1が複数出てしまって見栄えが悪いです。 これを消す方法を教えてください。 print "<TABLE CELLSPACING=1>\n"; print "<TR>\n"; print "<TD CLASS=TD1 WIDTH=100>名前</TD>\n"; print "<TD CLASS=TD1 WIDTH=100>ふりがな</TD>\n"; print "<TD CLASS=TD1 WIDTH=100>内線番号</TD>\n"; print "</TR>\n"; for ($i=0;$i<$gyou;$i++){ @log = split(/&/,$FILES[$i]); foreach(@log){ ($key,$value) = split(/=/,$_); $FORM{$key} = $value; $FORM{'SYOZOKU'} =~ s/\n$//g; } if ($searchkey eq $FORM{'SYOZOKU'}){ print &ok;} } sub ok{ print "<TR>\n"; print "<TD CLASS=TD1 HEIGHT=20>$FORM{'NAME'}</TD>\n"; print "<TD CLASS=TD1 HEIGHT=20>$FORM{'KANA'}</TD>\n"; print "<TD CLASS=TD1 HEIGHT=20>$FORM{'BANGOU'}</TD>\n"; print "</TR>\n"; } print "</TABLE>\n"; print "</BODY>\n"; print "</HTML>\n";

    • ベストアンサー
    • CGI
  • phpで読み込んだcsvが文字化けします

    PHPでCSVよ読み込んで名簿を作っています。 出力まではうまくいったのですが、なぜか一字だけ文字化けしてしまいます。(「務」→「冶」になってしまいます) 普段あまりプログラムはしないので、原因がわからず困りはてております。よろしくお願いいたします。 PHP部分の記述は以下になります。 ――――――――――――――――――――――――――――――――――― <?php $fname = "csv/meibo.csv"; $file = fopen($fname, "r"); $nowrap = "nowrap=\"nowrap\""; $tcent = "class=\"center\""; $tbg = "class=\"even\""; while (list($name, $post, $add, $add2, $tel, $http, $url, $mail) = fgetcsv($file, 1000, ",")){ $name = strtr($name, "﨑", "崎"); $add2 = strtr($add2, "﨑", "崎"); $tline ++; if($tline % 2 == 0){ echo "<tr $tbg>\n"; }else{ echo "<tr>\n"; } echo "<td $nowrap>$name</td>\n"; echo "<td $tcent>$post</td>\n"; echo "<td>$add<br />$add2</td>\n"; echo "<td $tcent>$tel</td>\n"; if($http == "http://"){ echo "<td $tcent><a href=\"$http$url\" target=\"_blank\"><img src=\"img/common/img_hp.gif\" alt=\"HPへ\" width=\"16\" height=\"16\" /></a></td>\n"; } else { echo "<td $tcent>&nbsp;</td>\n"; } echo "<td>$mail</td>\n"; echo "</tr>\n"; } fclose($file); ?> ――――――――――――――――――――――――――――――――――― PHP4を利用。 .phpのcharsetはShift_JISで、同じくShift_JISで保存しています。 CSVファイルはエクセルで作りShift_JISで書き出しています。

    • ベストアンサー
    • PHP