• ベストアンサー

繰り返しのコードをまとめて簡略化したい

以下のようなPHPを作成しました。 が、同じようなコードが繰り返し使われていて、 なんとか簡略化できないかなと考えています。 例えば、↓が10回出てくる。 LEFT(番号,LEN(番号)-2) + '-' + RIGHT (RTRIM(番号), 2) AS 番号2 なにかやり方あるのでしょうか。 見当違いのとこを言っていたらすいません。 ****************************************************** 作成したPHP 環境:PHP5.2 Apache2.2 SQLserver5 ****************************************************** <a href="clip.php?x=a">あ</a><br> <a href="clip.php?x=ka">か</a><br> <a href="clip.php?x=sa">さ</a><br> … <a href="clip.php?x=wa">わ</a><br> <?PHP $cont = mssql_connect("サーバ名","ユーザ名","パスワード"); mssql_select_db('[DB名]', $cont); if ($_GET['x']=='a') { // あ行 $sql = "select 氏名, 住所, LEFT(番号,LEN(番号)-2) + '-' + RIGHT (RTRIM(番号), 2) AS 番号2 from テーブル名 WHERE (氏名 LIKE N'あ%' OR 氏名 LIKE N'い%' OR 氏名 LIKE N'う%' OR 氏名 LIKE N'え%' OR 氏名 LIKE N'お%') ORDER BY 氏名"; } if ($_GET['x']=='ka') { // か行 $sql = "select 氏名, 住所, LEFT(番号,LEN(番号)-2) + '-' + RIGHT (RTRIM(番号), 2) AS 番号2 from テーブル名 WHERE (氏名 LIKE N'か%' OR 氏名 LIKE N'き%' OR 氏名 LIKE N'く%' OR 氏名 LIKE N'け%' OR 氏名 LIKE N'こ%') ORDER BY 氏名"; } if ($_GET['x']=='sa') { // さ行 $sql = "select 氏名, 住所, LEFT(番号,LEN(番号)-2) + '-' + RIGHT (RTRIM(番号), 2) AS 番号2 from テーブル名 WHERE (氏名 LIKE N'さ%' OR 氏名 LIKE N'し%' OR 氏名 LIKE N'す%' OR 氏名 LIKE N'せ%' OR 氏名 LIKE N'そ%') ORDER BY 氏名"; } ……………た行~ら行も同様のコードなので省略………………… if ($_GET['x']=='wa') { // わ行 $sql = "select 氏名, 住所, LEFT(番号,LEN(番号)-2) + '-' + RIGHT (RTRIM(番号), 2) AS 番号2 from テーブル名 WHERE (氏名 LIKE N'わ%' OR 氏名 LIKE N'を%') ORDER BY 氏名"; } $rc = mssql_query($sql,$cont); print("</table>"); while ($array = mssql_fetch_array($rc)) { print("<tr><td>"); print "".$array["氏名"].""; print("</td><td>"); print "".$array["住所"].""; print("</td><td>"); print "".$array["番号2"].""; print("</td></tr>"); } print("</table>"); mssql_close($cont); ?>

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

配列を使う例です。 <?PHP $whereArray=Array( "a"=>Array("あ","い","う","え","お"), "ka"=>Array("か","き","く","け","こ"), "sa"=>Array("さ","し","す","せ","そ") ); $_GET['x']="a"; //テスト $whereStr=""; if(is_array($whereArray[$_GET['x']])){ foreach($whereArray[$_GET['x']] as $val){ $whereStr.=($whereStr==""?"":" OR ")."氏名 LIKE N'{$val}%'"; } $whereStr="AND ( {$whereStr} )"; } $sql = <<<eof select 氏名, 住所, LEFT(番号,LEN(番号)-2) + '-' + RIGHT (RTRIM(番号), 2) AS 番号2 from テーブル名 WHERE 1 {$whereStr} ORDER BY 氏名 eof; print $sql; ?> ちなみにか行の「がぎぐげご」など濁音半濁音関係は大丈夫ですか?

smorgas030
質問者

お礼

回答ありがとうございます。 半濁音忘れていました。ご指摘ありがとうございます。 早速修正しましたが、エラーメッセージが出ました。 *******エラーメッセージ************** Parse error: syntax error, unexpected T_VARIABLE in C:\Program Files\Apache…test.php on line 70 ************************************* クエリを実行できないようなメッセージかと思います。 いただいたコードがよくわからなかったので、 よかったらご教授ください。 ************************************* $whereArray=Array( "a"=>Array("あ","い","う","え","お"), "ka"=>Array("か","き","く","け","こ"), "sa"=>Array("さ","し","す","せ","そ") ); ↑こちらはArrayを二回使っているということでしょうか。 通常であれば、"a"=> "あ"のように使うのかと思いますが、 こちらの場合は、"a"が"あ"から"お"まで置き換える?ということでしょうか。 $_GET['x']="a"; //テスト $whereStr=""; if(is_array($whereArray[$_GET['x']])){ foreach($whereArray[$_GET['x']] as $val){ $whereStr.=($whereStr==""?"":" OR ")."氏名 LIKE N'{$val}%'"; } $whereStr="AND ( {$whereStr} )"; } ↑こちらは、(1)IF文の中に(2)foreach文を入れているのでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

test.php の70行目(もしくは69行目)に何がかいていあるのかが 書いてありませんので状況がわかりかねます。 とにかくサンプルスクリプトをそのまま実行していただき、 動作したら、ホンチャンスクリプトに組み込むという2段階のテストを してください。 >こちらはArrayを二回使っているということでしょうか。 Arrayの中にArrayを入れることができます。 データ管理上常套的なものですので覚えておくと役にたつとおもいます。 >こちらは、(1)IF文の中に(2)foreach文を入れているのでしょうか。 IFをいれてる理由はforeachでまわす変数が配列でないときは エラーになるからです。 foreachの中でやっているのは三項演算ってやつですね。 ifでもかけるのでなれないうちは自分のわかる書式をご使用ください

smorgas030
質問者

お礼

回答ありがとうございます。 foreachがよくわからないので、 ifでやってみます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

配列に入れて繰り返しを書くとだいぶ違います。 $hoge = array( "氏名 LIKE N'あ%' OR 氏名 LIKE N'い%' OR 氏名 LIKE N'う%' OR 氏名 LIKE N'え%' OR 氏名 LIKE N'お%'", "氏名 LIKE N'か%' OR 氏名 LIKE N'き%' OR 氏名 LIKE N'く%' OR 氏名 LIKE N'け%' OR 氏名 LIKE N'こ%'", ... ); これでも1行で5回(あ~お)ずつ繰り返されていますからもっと簡略化できるでしょう。

smorgas030
質問者

お礼

回答ありがとうございます。 配列(array)というのがあるのですね。 はじめてしりました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 氏名をあいうえお順に並べて行ごとにボタンで表示させたい

    ある住所録があり、 「あ行」のボタンを押すと、「あ」~「お」の氏名の人を表示させ、 「か行」のボタンを押すと、「か」~「こ」の氏名の人を、 「さ行」のボタンを押すと、「さ」~「そ」の氏名の人を、 同じページに表示させたいと考えています。 「あ」~「お」の氏名の人を表示させるSQLはできました。 「か」~「こ」を表示する時も同じように作成すればいいかと思いますが、それをボタンで実行させるプログラムがわかりません。 違うページであれば、違うPHPファイルを作成して、 ボタンからそこにリンクするようにいいのかと思いますが、 同じページでボタンを押すと、それぞれの行の人の一覧を表示させたいと思います。 宜しくお願い致します。 ************************************************************ 「あ」~「お」の氏名の人を表示させるプログラム ************************************************************ <?php print("<table>"); print("<tr>"); print("<td>氏名</td>"); print("<td>住所</td>"); print("</tr>"); $cont = mssql_connect("サーバ名","ユーザ名","パスワード"); mssql_select_db('DB名', $cont); $sql = "select * from テーブル名 WHERE(person LIKE N'あ%')OR(person LIKE N'い%')OR(person LIKE N'う%')OR(person LIKE N'え%')OR(person LIKE N'お%') ORDER BY person"; $rc = mssql_query($sql,$cont); while ($array = mssql_fetch_array($rc)) { print("<tr><td>"); print "[".$array["person"]."]"; print("</td><td>"); print "[".$array["address"]."]"; print("</td></tr>"); } print("</table>"); mssql_close($cont); ?> ************************************************************ 環境 PHP5.23 Apache2.2 SQLserverVersion5 SQLとPHPは別サーバになります。

    • ベストアンサー
    • PHP
  • SQLにあるデータをWEB画面に出力するときに、フィールドの一部の値だけ表示させたい

    SQLにあるデータをWEB画面に出力するときに、 フィールドの値を全部表示させずに、 頭から3文字とか、後ろから2文字表示させたい場合は どうすればいいのでしょうか。 LEFT関数を使って作ってみましたが、うまくできません。 ご教授ください。 ****************************************************** 作成したPHP ****************************************************** <?php $cont = mssql_connect("サーバ名","ユーザ名","パスワード"); mssql_select_db('[DB名]', $cont); $sql = "select 氏名, 住所, LEFT(番号, 3) from テーブル名 $rc = mssql_query($sql,$cont); while ($array = mssql_fetch_array($rc)) { print("<table><tr><td>"); print "".$array[" LEFT(番号, 3)"].""; print("</td><td>"); print "".$array["住所"].""; print("</td><td>"); print "".$array["氏名"].""; print("</td></td></table>"); } mssql_close($cont); ****************************************************** 番号フィルドの値は5桁~10桁の数字が入っています。 ****************************************************** ?>

    • ベストアンサー
    • PHP
  • SQLにあるデータをWEB画面に出力するときに、フィールドの値を編集して表示させたい

    SQLにあるデータをWEB画面に出力するときに、 フィールドの値を編集して出力したいと考えています。 具体的には、フィールドの値が5~10桁の数字で、 WEB画面には下3桁目に「-]を入れたいと考えています。 例(1)SQLの番号フィールドの値:123456 WEB表示:1234-56 例(2)SQLの番号フィールドの値:12345 WEB表示:123-45 どうぞ宜しくお願い致します。 ****************************************************** 作成したPHP 番号フィールドの値を編集して表示したい ****************************************************** <?php $cont = mssql_connect("サーバ名","ユーザ名","パスワード"); mssql_select_db('[DB名]', $cont); $sql = "select 氏名, 住所, 番号 from テーブル名 $rc = mssql_query($sql,$cont); while ($array = mssql_fetch_array($rc)) { print("<table><tr><td>"); print "".$array["番号"].""; print("</td><td>"); print "".$array["住所"].""; print("</td><td>"); print "".$array["氏名"].""; print("</td></td></table>"); } mssql_close($cont); ?>

    • ベストアンサー
    • PHP
  • ページング処理をさせたい

    テーブルのデータを20件表示させ、「next」を押すと 次の20件を表示させるPHPを作成したいと考えています。 (「back」を押すと、前の20件を表示するようにもしたい) そこで、以下のようなファイルを作成しました。 実行をすると、idが「1」から「19」までのデータが表示され、 「next」を押しても、同じ「19」までのデータが表示されます。 (idは「1,2,3,4,…」のように1づつ増えるフィールドになります。) **************************************** 作成したtest.phpのコード 環境:PHP5 Apache2.2 MQSQLver5 **************************************** <body> <a href="test.php?p=10">next</a> <?php $startData = $_GET['p'];//GET送信された件数の値を取得 $endData = $startData + 10-1; $cont = mssql_connect("サーバ名","ユーザ名","パスワード"); mssql_select_db('[DB名]', $cont); $sql = "select * from テーブル名 where id <= ".$endData; $rc = mssql_query($sql,$cont); ?> <table> <?php do{ while ($array = mssql_fetch_array($rc)) { print("<tr>"); print("<td>"); print $array["氏名"]; print("</td>"); print("<td>"); print $array["住所"]; print("</td>"); print("</tr>"); } }while (mssql_next_result($rc));//次のデータの読み込み mssql_close($cont); ?> </table> </body> </html>

    • ベストアンサー
    • PHP
  • 「次の10件を表示する」のような表示がしたい

    住所録を表示するページをPHPで作成しました。 問題なくできたのですが、データが増えたので一度に表示するのは例えば20件とかにして、「次の20件」のようなボタンをおすと、 21件~40件を表示させ、そのページには、 「前の20件」と「次の20件」のボタンを表示させたいと考えています。 最初のページには、「前の20件」ボタンはなく、 最後のページには、「次の20件」ボタンは表示させないように考えています。 どのようにすればよろしいでしょうか。 ご教授ください。 ************************************************ 作成したPHP ************************************************ <?php print("<table>"); $cont = mssql_connect("サーバ名","ユーザ名","パスワード"); mssql_select_db('DB名', $cont); $sql = "select * from テーブル名 $rc = mssql_query($sql,$cont); while ($array = mssql_fetch_array($rc)) { print("<tr>"); print("<td>"); print "".$array["氏名"].""; print("</td>"); print("<td>"); print "".$array["住所"].""; print("</td>"); print("</tr>"); } print("</table>"); mssql_close($cont); ?> ************************************************ 環境 PHP5.2 Apache2.2 SQLserverVersion5 PHPとSQLは別サーバになります。 両サーバOS:windows

    • ベストアンサー
    • PHP
  • SQLserverからPostgreSQLに移行したい

    PHPとSQLserverを使用した環境でデータを作成していましたが、 DBがPostgreSQLに変更になりました。 接続するところまではできましたが、 クエリ作成、結果を出力するところがわかりません。 WEBで検索しましたが、よくわかりませんでした。 どうぞ宜しくお願い致します。 ********************************************************** SQLserverを使用する前提で作成したデータ ********************************************************** $sql = "select * from テーブル名"; $rc = mssql_query($sql,$cont); print("<table>"); while ($array = mssql_fetch_array($rc)) { print("<tr><td>"); print "".$array["氏名"].""; print("</td><td>"); print "".$array["住所"].""; print("</td><td>"); print "".$array["電話番号"].""; print("</td></tr>"); } print("</table>");

    • ベストアンサー
    • PHP
  • パラメータを2個つけたい

    ある住所録があり、インデックスをつけてページング処理もさせたいと思っています。 具体的には、「あ」を押すとあ行の人のデータが1~10件表示され、 「next」を押すと、「あ」行の11~20件を表示するイメージになります。 以下のPHPを作成しましたがうまく動作しません。 どうしたらよろしいでしょうか。 ご教授ください。宜しくお願い致します。 ********************************** エラーメッセージ ********************************** Notice: Undefined variable: dtcnt in C:\Program Files\Apache…テスト.php on line 359 359行目が「back」を表示するコードになります↓。 if ($p > 1) { echo " <a href=\"".$_SERVER["PHP_SELF"]."?p=$prev\"> back</a>"; } ****************************** 作成したPHP 環境:PGSQL8.24 PHP5 Apache2.2 ****************************** <a href="テスト.php?x=a">あ</a> <a href="テスト.php?x=ka">か</a> … <a href="テスト.php?x=wa">わ</a> <table> <tr> <th>NO</th> <th>氏名</th> <th>住所</th> </tr> <?php // データベースに接続する $conn = pg_connect("host=サーバ dbname=データベース user=ユーザ password=パスワード") or die("接続エラー"); // 取り出す最大レコード数 $lim = 10; // 表示するページ位置を取得する $p = intval(@$_GET["p"]); if ($p < 1) { $p = 1; } // 表示するデータの位置を取得する $st = ($p - 1) * $lim; // 前のページ/次のページのページ番号を取得する $prev = $p - 1; if ($prev < 1) { $prev = 1; } $next = $p + 1; // データを取り出す if ($_GET['x']=='a') { // あ行 $sql = "select no, name, address from テーブル WHERE (name LIKE N'あ%' OR name LIKE N'い%' OR name LIKE N'う%' OR name LIKE N'え%' OR name LIKE N'お%') ORDER BY name LIMIT $lim OFFSET $st;"; } …(か行~ら行) if ($_GET['x']=='wa') { // わ行 $sql = "select no, name, address from テーブル WHERE (name LIKE N'わ%' OR name LIKE N'を%' OR name LIKE N'ん%') ORDER BY name LIMIT $lim OFFSET $st;"; } // 取り出したデータを表示する for ($i = 0; $i < pg_num_rows($res); $i++) { $row = pg_fetch_array($res, $i, PGSQL_ASSOC); echo "<tr>"; echo "<td>".$row["id"]."</td>"; echo "<td>".cnv_enc($row["name"], $enc_disp, $enc_db)."</td>"; echo "<td>".$row["address"]."</td>"; echo "</tr>"; } echo "</table>"; // 前のページ/次のページへのリンク if ($p > 1) { echo " <a href=\"".$_SERVER["PHP_SELF"]."?p=$prev\"> back</a>"; } if (($next - 1) * $lim < $dtcnt) { echo " <a href=\"".$_SERVER["PHP_SELF"]."?p=$next\"> next</a>"; } // 接続を解除する pg_close($conn); ?> </table> </body> </html>

    • ベストアンサー
    • PHP
  • コードのどこが間違っているのかを教えてください。

    ある文字を入力し、それをカンマ区切りして3つに分け、その3つの最大値を表示するプログラムを入力したいです。ただし、条件として、上限の桁数5を越える、文字か数字化の判定を行い、文字が1つでも混ざっている際はエラー表記され再度入力、さらに終了判断を行う際も、あくまで「y」「n」と入力したときのみが正常であり、複数文字を入力する際は、エラー表記され、再度入力という形をとりたいです。 フローを書きながら、サブ関数も使い、LINUXで以下のように書いてみました。 ただ、これだと /*-----------------------------------------*/ /tmp/ccKMOmJN.o: In function `word_judge': kadai6.c:(.text+0x4b2): undefined reference to `isdigits' collect2: ld はステータス 1 で終了しました /*-----------------------------------------*/ となってしまいました。 どのようなコードに直せばいいのでしょうか? すごく長いですが、わかりやすく解説してくださると、とても助かります。 あと、fgets関数やsscanf、getchar関数など、ネット上のサンプルを参照して、使っただけなので、もしかしたら間違ってるかもしれません。 そこについても、教えてくださると、とてもうれしいです。 /* ソースコード */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <limits.h> #define LIMIT (5) #define NULLB '\0' #define ECOUNT (20) #define EWORD (2) int word_judge(char array[]); void digits_judge(int a_len , int b_len , int c_len) ; int main(int argc , char *argv[]) { int number_a ; int number_b ; int number_c ; int input_len ; int a_len ; int b_len ; int c_len ; int end_len ; char input[ECOUNT] ; char a[ECOUNT] ; char b[ECOUNT] ; char c[ECOUNT] ; char array[ECOUNT] ; char end[EWORD] ; end[0] = 'n' ; while( end[0] == 'n' ) { while(1) { number_a = 0 ; number_b = 0 ; number_c = 0 ; input_len = 0 ; a_len = 0 ; b_len = 0 ; c_len = 0 ; end_len = 0 ; memset(input , NULLB , sizeof(char) *ECOUNT) ; memset(a , NULLB , sizeof(char) *ECOUNT) ; memset(b , NULLB , sizeof(char) *ECOUNT) ; memset(c , NULLB , sizeof(char) *ECOUNT) ; memset(end , NULLB , sizeof(char) *EWORD) ; printf("a , b , c ?:") ; fgets(input , ECOUNT , stdin); input_len = strlen(input); if( input_len < ECOUNT-1 ) { sscanf(input , "%[^,] , %[^,], %s" , a , b , c); if(a[0] != NULLB && a[0] != NULLB && c[0] != NULLB) { if(word_judge(a) != 0 && word_judge(b) != 0 && word_judge(c) != 0 ) { a_len = strlen(a) ; b_len = strlen(b) ; c_len = strlen(c) ; if(a_len >= LIMIT || b_len >= LIMIT || c_len >= LIMIT) { digits_judge(a_len , b_len , c_len) ; } else { number_a = strtol(a , NULL , 10) ; number_b = strtol(b , NULL , 10) ; number_c = strtol(c , NULL , 10) ; printf("最大値:") ; if(number_a > number_b && number_a > number_c) { printf("%d\n", a); } else { if(number_b >number_a && number_b > number_c) { printf("%d\n", b) ; } else { printf("%d\n", c) ; } } break ; } } else { printf("文字が混ざっています。\n") ; } } else { printf("正しく入力して下さい。\n") ; } } else { if(input[ECOUNT] == '\n') { } else { while(getchar() != '\n'); } printf("入力数が多いです。\n"); } } while(1) { int end_len ; char end[EWORD] ; end_len = 0 ; memset(end , NULLB , sizeof(char) *EWORD) ; printf("終了しますか? y/n: "); fgets(end , EWORD , stdin); end_len = strlen(end); printf("\n"); if(end_len == EWORD) { if(end[0] != 'y' && end[0] != 'n') { printf("y or nを入力して下さい。\n"); } else { break ; } } else { if(input[ECOUNT] == '\n') { } else { while(getchar() != '\n'); } printf("入力が間違っています。y or n を入力しなおしてください。\n"); } } } return 0 ; } int word_judge(char array[ ]) { int array_len ; int i ; int tmp ; int r_value ; tmp = 0; r_value = 0 ; for(i=0 ; i< array_len ; i++) { tmp = isdigits(array[i]) ; if(tmp != 0) { r_value = 1; } else { r_value = 0; break ; } } return r_value ; } void digits_judge(int a_len , int b_len , int c_len) { int a ; int b ; int c ; a = 0 ; b = 0 ; c = 0 ; a_len = 0 ; b_len = 0 ; c_len = 0 ; if(a_len >= LIMIT) { a = 1 ; } else { } if(b_len >= LIMIT) { b = 10 ; } else { } if(c_len >= LIMIT) { c = 100 ; } else { } switch(a + b + c) { case 111 : printf("aとbとcの桁が多いです。\n"); break; case 11 : printf("aとbの桁が多いです。\n"); break; case 110 : printf("bとcの桁が多いです。\n"); break; case 101 : printf("cとaの桁が多いです。\n"); break; case 1 : printf("aの桁が多いです。\n"); break; case 10 : printf("bの桁が多いです。\n"); break; case 100 : printf("cの桁が多いです。\n"); break; } }

  • 下のコードの修正をお願いします。

    終了処理、バッファのクリアなど、ほとんどの処理は出来たのですが、唯一a,b,cの入力数が上限の桁数LIMITをオーバーしてしまった場合に本来エラーが表示されなければならないのにそのまま正常処理で最大値が出力されてしまいます。つまり、サブ関数void disp_errorでの処理がmain関数で実行されません。 どこを直せばいいのでしょうか? #include <stdio.h> #include <string.h> #include <stdlib.h> #include <limits.h> #define LIMIT (5) #define NULLB '\0' #define ECOUNT (3*LIMIT + 4) #define EWORD (3) #define NORMAL (0) #define ABNORMAL (-1) #define LF '\n' int word_judge(char array[]); void disp_error(int x_len , int y_len , int z_len) ; int main(int argc , char *argv[]) { int number_a ; int number_b ; int number_c ; int input_len ; int a_len ; int b_len ; int c_len ; int end_len ; int max ; char input[ECOUNT+1] ; char a[ECOUNT+1] ; char b[ECOUNT+1] ; char c[ECOUNT+1] ; char array[ECOUNT+1] ; char end[EWORD+1] ; end[0] = 'n' ; while(end[0] == 'n' ) { while(1) { number_a = 0 ; number_b = 0 ; number_c = 0 ; input_len = 0 ; a_len = 0 ; b_len = 0 ; c_len = 0 ; end_len = 0 ; max = 0; memset(input , NULLB , sizeof(char) *ECOUNT+1) ; memset(a , NULLB , sizeof(char) *ECOUNT+1) ; memset(b , NULLB , sizeof(char) *ECOUNT+1) ; memset(c , NULLB , sizeof(char) *ECOUNT+1) ; memset(end , NULLB , sizeof(char) *EWORD+1) ; printf("a,b,c ?:") ; fgets(input , ECOUNT+1 , stdin) ; input_len = strlen(input) ; if(input_len <ECOUNT) { a_len = strlen(a) ; b_len = strlen(b) ; c_len = strlen(c) ; sscanf(input , "%[^,], %[^,], %s" , a , b , c) ; if(a[0] != NULLB && b[0] != NULLB && c[0] != NULLB) { if(word_judge(a) == NORMAL && word_judge(b) == NORMAL && word_judge(c) == NORMAL) { if(a_len > LIMIT || b_len > LIMIT || c_len > LIMIT) { disp_error(a_len , b_len , c_len) ; } else { number_a = strtol(a , NULL , 10) ; number_b = strtol(b , NULL , 10) ; number_c = strtol(c , NULL , 10) ; max = number_a ; printf("最大値:") ; if(number_b > number_a) { max = number_b ; if(number_c > number_b) { max = number_c ; } } else { if(number_c > number_a) { max = number_c ; } } printf("%d\n" , max) ; break ; } } else { printf("文字が混ざっています。 \n") ; } } else { printf("正しく、入力をしてください。\n") ; } } else { if(input[ECOUNT-1] == LF) { } else { /* バッファのクリアを行う */ while(getchar() != LF); } printf("入力数が多いです。\n") ; } } while(1) { printf("終了しますか? y/n:" ); fgets(end , EWORD+1 , stdin ) ; end_len = strlen(end) ; if(end_len < 3) { if(end[0] != 'y' && end[0] != 'n') { printf("y or nを入力して下さい。\n") ; } else { break ; } } else { if(end[EWORD-1] == LF) { } else { while(getchar() != LF) ; } printf("入力が間違っています。y or nを入力しなおしてください。\n") ; } } } return 0 ; } int word_judge(char array[]) { int array_len ; int i ; int sub_number ; int r_value ; sub_number = 0 ; r_value = NORMAL ; array_len = strlen(array) ; for(i=0 ; i<array_len ; i++) { sub_number = isdigit(array[i]) ; if(sub_number != 0) { r_value = NORMAL ; } else { r_value = ABNORMAL ; break ; } } return r_value ; } void disp_error(int x_len, int y_len , int z_len) { int fc ; fc = 0 ; if(x_len > LIMIT) { fc += 1 ; } if(y_len > LIMIT) { fc += 10 ; } if(z_len > LIMIT) { fc += 100 ; } switch(fc) { case 11 : printf("aとbの桁が多いです。 \n") ; break ; case 110 : printf("bとcの桁が多いです。 \n") ; break ; case 101 : printf("aとcの桁が多いです。 \n") ; break ; case 1 : printf("aの桁が多いです。 \n") ; break ; case 10 : printf("bの桁が多いです。 \n") ; break ; case 100 : printf("cの桁が多いです。 \n") ; break ; } }

  • phpについて質問です。

    php初心者です。 以下のようなコードを書きました。テストの点数を配列に用意し最大値を表示したいのですがうまくいきません。 どなたかご教授お願いします。 <html> <body> <?php $score = array(20, 21, 59, 100, 78); $max = 0; ?> <table border = "2"> <tr bgcolor = aqua> <th>番号</th> <th>点数</th> </tr> <?php for($i=0; $i<count($score); $i++){ if($max < $socre[$i]) $max = $score[$i]; print"<tr>"; print"<td>{$i}</td><td>{$score[$i]}</td>\n"; print"</tr>\n"; } print"</table>\n"; print"</br>\n"; ?> <?php print"最高点は{$max}です。\n"; ?> </body> </html> foreachをつかえばうまくいきました。 for文ではいけないのでしょうか。 最大値が0と表示されるのでどうやらif文の条件分岐がうまくいってないようなのですが..... 初心者なので勘違いをしているところがあると思います。 よろしくお願いします。

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • ブラウザのみの場合とAPEX legendsというPCゲームを開いた時のMbpsの差が開きすぎておかしいです。
  • インターネットブラウザで速度測定をした場合、平均で300mbps〜APEXを開き再度速度測定をした場合8.0まで落ちます。
  • ルーターを最新型に変えてWi-Fi6対応の物の変えて、イーサネットも接続しLANケーブルの企画もCAT6以上のものでした。
回答を見る