• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:注文内容で後処理を変えたい)

注文内容の後処理を変える方法とは?

このQ&Aのポイント
  • フォームから注文した商品の一回の注文内容で後処理を変える方法を教えてください。
  • POST送信された注文の中身に応じて、後処理を変えたい場合のプログラムに関して質問です。
  • プログラムを作成しましたが、正規表現マッチの記述が上手くいかずにエラーが表示されます。どこが誤っているのでしょうか?

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

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

ああなるほど、なんとなくわかりました。 完全一致が原則であれば、正規表現である必要はありません こんな感じでどうでしょ? <? $tyumonA = array(0,0,0,0,0,0,0); $tyumonB = array(1,1,1,1,1,1,1); $tyumonC = array(1,1,0,1,0,0,1); $tyumonD = array(1,3,1,1,3,1,1); $tyumonE = array(1,0,3,3,0,1,3); $tyumonF = array(2,2,2,2,2,2,2); $tyumonG = array(2,2,3,1,0,2,3); $tyumonH = array(3,3,3,3,3,3,3); $tyumonI = array(3,0,0,3,3,0,0); print "A=".check($tyumonA)."<br>"; print "B=".check($tyumonB)."<br>"; print "C=".check($tyumonC)."<br>"; print "D=".check($tyumonD)."<br>"; print "E=".check($tyumonE)."<br>"; print "F=".check($tyumonF)."<br>"; print "G=".check($tyumonG)."<br>"; print "H=".check($tyumonH)."<br>"; print "I=".check($tyumonI)."<br>"; function check($array){ if(!is_array($array)) return false; $flg=""; if(match_array(0,$array)) $flg="A"; if(match_array(1,$array)) $flg="B"; if(match_array(Array(0,1),$array)) $flg="B"; if(match_array(Array(1,3),$array)) $flg="B"; if(match_array(Array(0,1,3),$array)) $flg="B"; if(match_array(2,$array)) $flg="C"; if(in_array(2,$array)) $flg="C"; if(match_array(3,$array)) $flg="D"; if(match_array(Array(0,3),$array)) $flg="D"; return $flg; } function match_array($vars,$array){ if(!is_array($array)) return false; $vars_array=is_array($vars)?array_unique($vars):Array($vars); $array=array_unique($array); if(count($vars_array)!=count($array)) return false; foreach($vars_array as $val){ if(!in_array($val,$array)) return false; } return true; } ?> ちなみに・・・ >POST送信された注文の中身がすべて2の時、Cの処理 >POST送信された注文の中身に2が含まれる時、Cの処理 この二つについて、上の条件は下の条件に含まれてますよね??

5bS8F7V-6R
質問者

お礼

ありがとうございます。 用事で出かけていたので返答が遅れてしまいました。 まさに、やろうとしていたことができました。 それにしてもarray_unique()とは本当に目からうろこです。 これのおかげで、すっきりした構文になってわかりやすいです。 最初in_array()で考えていたのですけど、わたしの使用の仕方が間違っているのかin_array()特有のエラーが発生して、対処に困ったのでpreg_match()を使用しょうとしたのですけど、これもうまくいかなく、途方にくれていましたけど、yambejp様のおかげで助かりました。ありがとうございます。 これでいけるとは思いますが、もう少しテストしてみますね。 貴重な昼休みのお時間の合間に考えていただきましてありがとうございます。

5bS8F7V-6R
質問者

補足

単独のテストでは有効な動作をしてくれます。 ありがとうございました。 後はシステムに取り込んでのテストになりますが、問題はないでしょう。 システムに取り込む際、少し改造しますが、すっきりした構文のおかげで構文自体を理解しましたので、問題が発生しても対処できそうです。 本当にありがとうございました。

その他の回答 (1)

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

POSTデータはどんな形式なのでしょうか? その前提によりまったく処理がことなります。 サンプルのformかなんか提示があると理解しやすいかも。

5bS8F7V-6R
質問者

お礼

早速のご返答ありがとうございます。 ご返答をいただいて恐縮なのですが、おっしゃりたい事はわかるのですが、今回は単純に、POSTデーターされるであろう下記の9パターンに対してどのパターンかを区別する方法が知りたいのです。 パターン1 $tyumonA = array(0,0,0,0,0,0,0);   パターン2 $tyumonB = array(1,1,1,1,1,1,1);  パターン3 $tyumonC = array(1,1,0,1,0,0,1); パターン4 $tyumonD = array(1,3,1,1,3,1,1); パターン5 $tyumonE = array(1,0,3,3,0,1,3); パターン6 $tyumonF = array(2,2,2,2,2,2,2); パターン7 $tyumonG = array(2,2,3,1,0,2,3); パターン8 $tyumonH = array(3,3,3,3,3,3,3); パターン9 $tyumonI = array(3,0,0,3,3,0,0); 今回、投稿させてもらったのは、一番簡単なパターン1が思った結果にならなかったためです。 単純にパターン1をクリアしようよ思う構文を考えれば、下記の構文になりますが、 foreach($tyumonA as $data){ if(preg_match('/0/', $data)){ echo '<p>' . 'syori_A' . '</p>'; }else{ echo '<p>' . " syori ERROR_A " . '</p>'; } } あえて、一つ一つを確認して、その確認と確認した回数とで合否をつける方法をとったのには後の8パターンが来たときの振り分けに応用できないかと思ったからです。 わたしが考えていることは一つ一つを調べていってマッチする正規表現と同じならば置換していって置換回数と確認回数が同じものが注文をうけたパターンに相当するといった区別になるのではと思っています。 preg_replace ()で出来ないかとは思っています。 この際、ネックとなるのは正規表現となるのかな。と思っているのです。実際問題自信がありましたパターン1がクリアできなかったわけですので、------ もちろん、わたしが考えているパターン区別の方法がありましたら、おしえていただきたいです。 長くなりましたが、単純に考えてもらって9パターンの中からどのパターンになるかを区別する構文をおしえてください。 もちろん、参考意見でも結構です。

5bS8F7V-6R
質問者

補足

まだ、わかりにくいですね。 ようするに、たとえば、パターン3を満足する構文がしりたいのです。 パターン3のデーターが送信されたと考えるとパターン3をtrueにする構文。 このパターン3をtrueにする構文をおしえていただきたいだけです。 できれば パターン3のデーターが送信された---->考えられる9のパターンを検証できる構文---->このデーターはパターン3です。 が望ましいのですが、無理ならどのパターンでもいいので、クリアできる構文を教えてください。 それに基づいて関連性をこちらでつけていきます。 教えていただいた構文はすべてこちらでテストさせていただくつもりですのでよろしくお願いします。 尚、パターン1の検証でわたしが考えた構文の指摘、つっこみでも構いません。

関連するQ&A