アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在ラジオボタンでの選択後に条件分岐するスクリプトを製作しておりますが、if文で製作すると私の場合(駆け出しです。)およそ、見当もつかない位の時間がかかります。そこで皆様方の知恵を頂き開発時間の短縮が出来ればと思い投稿しました。よろしくお願いします。

<内容>
(1)値段表示はファイルを読み込んで表示します。200.txtなら、200円と表示です。

(2)前のページより田中、鈴木、小林の値をhiddenで送っています。鈴木さんが購入すると、田中さんより200円UP、小林さんだと、田中さんより300円UPにしています。
1.php
(下記のようにグダグダ長い文を書いていくのはあまりにも非効率のような気がしますので皆様方の知恵を拝借させていただきたいと思います。あつかましくて申し訳ございません。)
<?php
if(c=="田中" && a=="001" && b=="0"){
$file_name="200.txt";
$file=fopen($file_name,"r") or die("OPENエラー $file_name");
$string = fgets($file, 20);
echo $string;
}
elseif(c=="田中" && a=="002" && b=="0"){
$file_name="400.txt";
$file=fopen($file_name,"r") or die("OPENエラー $file_name");
$string = fgets($file, 20);
echo $string;
}
elseif(c=="田中" && a=="0" && b=="010"){
$file_name="600.txt";
$file=fopen($file_name,"r") or die("OPENエラー $file_name");
$string = fgets($file, 20);
echo $string;
}
以下省略
?>

A 回答 (3件)

慣れですかね。



たとえば、三つの条件を一変に指定するので条件が多くなってしまうかと思います。

(1)値段表示はファイルを読み込んで表示します。200.txtなら、200円と表示です。

どうやって値段表示ファイルを選択するのかがわかりませんが。。。
たとえば$aが選択の基準ならば$aだけでif文を作ればよいのでは。

(2)前のページより田中、鈴木、小林の値をhiddenで送っています。鈴木さんが購入すると、田中さんより200円UP、小林さんだと、田中さんより300円UPにしています。

これは
$plus = 0; # プラス金額初期設定
if ($c == "鈴木") {
$plus += 200;
} elseif ($c == '小林') {
$plus += 300;
}
とかで、各条件を別々にすればいいのでは?
    • good
    • 0

こんにちは。


まず、変数$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で汎用性を高くすると、利便性に反して処理は遅くなります。(メモリ上にある自分で定義した関数やクラスを呼び出す手間がかかるため)
この辺のどうやって処理させるかも、慣れれば自分流で出来るようになります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。ご回答頂いた内容に非常に満足しております。言葉足らずを補っていただき、また、具体的なソースを教えていただいて、本当に感謝しております。ありがとうございました。

所で理論演算子ですが、例えば
************************************************
$a==001 を基点に $b==0ならtrue $b==1ならtrueに
したいのです。$b同士は処理しません。
************************************************
このような理論演算子は存在するのでしょうか?下記に書いたものは &&とorですが、これはだめでした。もう少しお付き合いいただければと思います。よろしくお願いいたします。
if ($c == "田中"){
if ( $a == "001" && $b == "0" or $b == "1")

お礼日時:2005/04/03 12:57

開発期間というか。

。。
処理を短くしたいってことですよね。

同じ処理がある場合はfunctionを使います。
自分専用関数を作るイメージです。

頑張ってください。

#もっといい参考ページがあるかもしれません。

参考URL:http://ww7.tiki.ne.jp/~inabah/php/004_001.htm
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。教えて頂いたfunctionをを勉強したいと思います。貴重なご意見ありがとうございます。

お礼日時:2005/04/03 12:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!