• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:開発期間を短縮したい)

開発時間を短縮!条件分岐スクリプトの効率化方法を教えてください

campanella_77の回答

  • ベストアンサー
回答No.2

こんにちは。 まず、変数$c とか $a とか $b って何でしょうか。変数に意味のある値を入れたいならば、それを読んでいる方に伝えたい場合は意味のある変数名にしてみてください。たとえば、 $c は、 $name ・・・名前を入れるんだなってわかりやすいですよね $a は、 $count・・・カウント $b は、 $no・・・商品番号を入れるだろうな みたいな。 (もしくは$c は、田中さんの買った個数でしょうか。$a が鈴木さんが買った個数とか?) それと、$a の値が1番目と2番目の if では3桁なのに3番目の if では "0" 一桁になっています。 さらに、$c の値が3つ目の if でいきなり "010"???になってるし $a が "0" に・・・。 この辺を3桁なら3桁に統一、もしくは全部、頭に「 0 」を「付けない」。といった統一する規則がないと開発期間を短くすることはほど遠いでしょう。 また、鈴木さんと小林さんはどこに出てきますか? で、見た感じプログラムの覚えたての頃にやりそうな記述の仕方ですね。よって、慣れていけばそれなりに上手に書けるようになっていきます。まずは『プログラムになれること。』だと思います。 具体的に見ていくと、3つの if で、「 c == "田中" 」ってあるので、この3つの if の前に、 if ($c == "田中"){ if ( $a == "001" && $b == "0") のように出来ます。次に、どの if後の処理にも $file = fopen($file_name , "r") or die("OPENエラー" . $file_name);・・・・ と、ありますが、これは if群を抜けてからでいいんじゃないですか。具体的には、 ---------------------- 質問に書かれていた処理を書き直すと ----------------------- if ($c == "田中"){ if ( $a == "001" && $b == "0") //マッチした後の処理が1行の時は「{」を省略できる $file_name = "200.txt"; else if ( $a == "002" && $b == "0") $file_name = "400.txt"; ・・・・・・省略・・・・・・ } // if ( $c == "田中") の終了 //ファイルのオープンと読み込み $file = fopen($file_name , "r") or die("OPENエラー $file_name"); $string = fgets($file , 20); echo $string; -------------------------------------------------------------------------------------- あと、 $a の値と、ファイルの名前に共通の部分があるなら、たとえば・・・if なんか使わなくても $tmp = $a * 100; $file_name = (string)$tmp . ".txt"; これだけで出来ます。 $c と絡ませたいのならそういった使い方にするような変数にする方が楽でしょう。 $tmp = $a * $c * 100; $file_name = (string)$tmp . ".txt"; この辺は『慣れ』でしょうから、いきなり、と言うよりは徐々に書き直していくとよいと思いますよ。 そのうち、自分で定義した関数やクラスを書いて処理するようになるでしょう。 ※なお、処理速度という点から見るのでしたら、function や classで汎用性を高くすると、利便性に反して処理は遅くなります。(メモリ上にある自分で定義した関数やクラスを呼び出す手間がかかるため) この辺のどうやって処理させるかも、慣れれば自分流で出来るようになります。

Autosound
質問者

お礼

ご回答ありがとうございます。ご回答頂いた内容に非常に満足しております。言葉足らずを補っていただき、また、具体的なソースを教えていただいて、本当に感謝しております。ありがとうございました。 所で理論演算子ですが、例えば ************************************************ $a==001 を基点に $b==0ならtrue $b==1ならtrueに したいのです。$b同士は処理しません。 ************************************************ このような理論演算子は存在するのでしょうか?下記に書いたものは &&とorですが、これはだめでした。もう少しお付き合いいただければと思います。よろしくお願いいたします。 if ($c == "田中"){ if ( $a == "001" && $b == "0" or $b == "1")

関連するQ&A

  • php初心者の質問fgetcsv

    いつもお世話になっております。 下記のプログラムを実行しますと、 999,test,90, 999,test,90, 999,test,90, のようになりますが、 行末の最後のカンマを取り除きたいです。 すみません。どの部分修正すればよいか、ご教授いただきたくどうぞよろしくお願い致します。 <?php $file_name="test.csv"; $id=999; $name="test"; $point=90; $array = compact("id","name","point"); $string = implode(",",$array); $file = fopen($file_name,"a+") or die("OPENエラー{$file_name}"); flock($file,LOCK_EX); fputs($file,mb_convert_encoding($string."\n",'Shift-JIS','UTF-8')); flock($file,LOCK_UN); fclose($file); $file = fopen($file_name,"r"); while ($row = fgetcsv($file,1000,",")){ echo "<hr>"; for ($i = 0 ; $i<count($row); $i++){ echo mb_convert_encoding($row[$i].",",'UTF-8','Shift-JIS'); } } fclose($file); ?>

    • ベストアンサー
    • PHP
  • fopenしてくれない。。。

    こんにちは。PHP初級者です。 postgresqlに入れたデータをCSVファイルに書き込んで、出力してみたいと思って以下のプログラムを作ってみました。 $file_name ="insatu.csv"; //データベースから呼び出し以下の$arrayへいれるデータは省略します。 //今回は1行のみのデータを入力プログラムになってますが、本当は何行もやるプログラムとなってます。 $array = compact("a","b","c","d","e","f","g","h","i","j","k","l"); $string = implode("," , $array); $file = fopen($file_name, "a") or die ("openエラー $file_name"); flock($file, LOCK_EX); fputs($file, $string."\n"); flock($file, LOCK_UN); fclose($file); $file = fopen($file_name, "r"); while($array = fgetcsv($file, 1000, ",")){ echo "<hr> \n"; for($i=0; $i< count($array); $i++){ echo $array[$i]."<br>"; } } fclose($file); なぜか最初の fopenで dieの方へ行って OPENエラーメッセージが出てきます。 この作業をするためには何かあらかじめ入れなくてはいけない構文とかあるんでしょうか?何か間違っていますでしょうか? それともphp.iniを設定するとかしなくてはいけないんでしょうか? php5を使用してますが、php.iniやphp.ini-distはともに見つからず。 困り果ててます。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • カウンターを一定数でリセットしたい

    はじめまして。 レッツPHPのカウンタを使っています。 <?php $fp = fopen("count.txt","r+") or die("Error!"); $count = fgets($fp, 64); $count++; rewind($fp); //set_file_buffer($fp, 0); flock($fp, LOCK_EX); fputs($fp, $count); fclose($fp); echo $count; ?> count_file.txt にはA00と記入しているのでA99になったら次はB00~Z99までカウントされるのを、F99まできたらリセットしA00から始めたいのですが式が分りません。$count++;を書き換えればいいのだとは思いますが・・・ よろしくお願いいたします。 PHP4.3.3

    • ベストアンサー
    • PHP
  • textファイルについて

    あるディレクトリーに test.txt aaa.txt があるのですが、 二つのテキストを開いて もし text.txtの3行目に http://www.goo.ne.jp/ があり aaa.txtの10行目にも http://www.goo.ne.jp/ があるとすれば aaa.txtの10行目を消したいのですが、 そんな事って可能ですか?? 色々考えたのですが、aaa.txtの10行目を消す時に 10行目を空にすると言う指定が出来なくて困ってます。 どうしてもaaa.txtの削除が出来ません。 参考までにスクリプトを載せておきます <?php $file_name = array("aaa.txt", "test.txt"); $list = fopen($file_name[0], "a+"); $delete_list = fopen($file_name[1], "r"); $listfile = file($file_name[0]); $listmax = count($listfile); $listfile = file($file_name[1]); $delete_listmax = count($listfile); if ($delete_listmax > 0){ for ($delete_line = 1; !feof($delete_list); $delete_line++){ $delete_lines = fgets($delete_list); $delete_lines = trim($delete_lines); if ($delete_lines){ if (is_file($file_name[0])){ for ($line = 1; !feof($list); $line++){ $lines = fgets($list); $lines = trim($lines); if ($lines){ if ($delete_lines == $lines){ //ここの部分がわからないです fputs($list, "あああ"); echo "O,K\n"; } } } } } } } fclose($delete_list); fclose($list); echo "\n終了\n"; ?> 詳しい方がいましたら宜しくお願いします

    • ベストアンサー
    • PHP
  • PHPでのファイルオープンの仕方について

    いつもこちらで勉強させていただいております。 初歩的な質問になるかもしれませんが、ご教授いただけたら幸いです。 windows7にて、VMware playerという仮想PCを作成するソフトを使い、Ubuntu(Linax)上でPHPの学習を行っております。 聞きたいこととしては、以下のプログラムを実行すると、 OPENエラー test.txt  と表示されるのはなぜなのか、ということです。 <html> <head> <title> ファイルにデータを書き込む </title> </head> <body> <?php $file_name = "test.txt"; $file = fopen($file_name, "a") or die("OPENエラー $file_name"); flock($file, LOCK_EX); $string = "文字列を書き込む"; fputs($file, $string); flock($file, LOCK_UN); fclose($file); ?> </body> </html> 参考書に載っていたプログラムそのまま書いたつもりですが、何がダメなのかが解りません。 設定ファイルか何かに特別なことをしなければいけないのでしょうか? 初歩的な質問になるかもしれませんが、聞ける人がいなく困っております。どなたかご存知の方がいらっしゃったら、教えて下さい。 以上、よろしくお願いします。

    • ベストアンサー
    • PHP
  • 改行コードだけの行が現れるまでを1行として取得

    PHPでインプットファイルから、 改行コードだけの行が現れるまでを1行として取得しようと思っています。 下記例のように、 fgetsで行を取得しようとしたら、 改行が現れた時点までを1行としてしまうので、 少し違った1行の取得となってしまいました。 どうすればPHPで実現できるのか教えて欲しいです。 【例】 this is a pen. good-bye. ↓ this is a pen.good-bye. を1行分として取得したい。 # PHP 5.3.9 # CentOS 5.8 ---- $inputpath = '/home/test/test.txt'; $file = fopen($inputpath,"r") or die("open error $inputpath"); flock($file,LOCK_SH); while (!feof($file)){ $string = fgets($file,10000); print "$string"; print "\n"; } //relese the lock flock($file, LOCK_UN); //close the file fclose($file); ----

    • ベストアンサー
    • PHP
  • エラー処理について

    $fp = fopen($logfile, "r+") or die("File Open Error!\n"); 上記のコードの方法で、エラー文字の装飾をしたいです。 die関数が言語構造なので、やはりif else的な処理で分けechoなどで表示する方法しかないでしょうか? $fp = fopen($logfile, "r+") or die("<p><font size=7 color=#00ff00>File Open Error!</font></p>");

    • ベストアンサー
    • PHP
  • Perlでのファイル入出力、処理方法

    メモ帳で以下のようなプログラムを書きました。(file_1.plで保存しました) #!/usr/bin/perl $file="data.csv"; $cityfile="name.txt"; $outfile="data_out.csv"; open (IN, $file) or die "$!"; open (FILE, $file) or die "$!"; open (OUT, ">$outfile") or die "$!"; @city = <FILE>; ・ ・ ・ これをCygwinコマンド上で、 perl file_1.pl と入力し、Enterを押すと「No such file or directory at file_1.pl line 9.」と表示されます。 line9はopen (FILE, $file) or die "$!";という文です。 どこが間違えで、どのように修正すればよいのでしょうか。 よろしくお願いします。

  • ファイルを読み込んで表示すると文字化けします

    次のようにファイルを読み込んでIEやGoogle Chromeで表示させると 日本語の文字化けが起こってしまいます・・・ どのようにすれば解決できるのでしょうか? [1.txt] ああ いい $file_name = "./1.txt"; if(is_file($file_name)){ $text = fopen($file_name,'r'); for($line = 1; !feof($text); $line++){ $lines = fgets($text); if($lines){ //print $lines; $pairs[] = preg_split('/ /', $lines); } } fclose($text); }else{ exit; } print_r($pairs);

    • ベストアンサー
    • PHP
  • csvの特定キーワード抽出後、その前後のキーワードを表示するには

    csvの特定キーワード抽出後、その前後のキーワードを表示するには -----sample.csv f01,名前01,説明01 d03,名前02,説明02 y12,名前03,説明03 -----呼び出しhtml sample.php?key=d03 -----sample.phpの処理 <?php $file_name = "sample.csv"; $file = @fopen($file_name, "r") or die("Data File Open Error"); flock($file, LOCK_SH); while (!feof($file)) { $buf = fgets($file, 4096) ; $data = split(",", $buf) ; if ($data[0] == $_GET["key"]) { $sampleid = $data[0] ; $samplename = $data[1] ; $sampleexp = $data[2] ; } } flock($file, LOCK_UN); fclose($file) ; ?> <h1><?php echo $samplename ?></h1> <h2><?php echo $sampleid ?></h2> <p><?php echo $sampleexp ?></p> 上記のようなフローの時に、sample.csv内の前後のデータをsample.php内で呼び出したいのですが、どうコードを書けばいいのかご教示ください。↓ <a href="ひとつ前のデータ">ひとつ前のデータ</a> <a href="ひとつ後のデータ">ひとつ後のデータ</a>

    • ベストアンサー
    • PHP