QA@IT

配列$arrvalに複数の選択肢がある場合の記述方法を教えてください。

2319 PV

http://qa.atmarkit.co.jp/q/9872の続きになりますが、

いつも大変お世話になっております。以下の様な$arrvalはその上の$where句の最後のT1.class IN ( ? )の?に当てはまる内容のものを抽出する設定になっております。この$arrvalの選択肢が$arrval=Array(Aコース)の様に一つの場合は正しいものを抽出いたしますが、下記の様に複数の選択肢(Aコース、aコース、A course)を持たせたい場合どのような記述をすればよろしいかご教授頂けませんでしょうか。

$where = $_GET['product_id'].'!= T1.product_id and T2.del_flg = 0 and T1.class IN ( ? )';

if ($_GET['class'] == ‘スポーツ') {

$arrval = Array(Aコース) or Array(aコース) or Array(A course);
$arrval = (Array(Aコース) or Array(aコース) or Array(A course));
$arrval = Array(“Aコース” , “aコース” , ” A course”);
$arrval = Array(‘Aコース’ , ‘aコース’ , ’A course’);
$arrval = Array(‘Aコース’ or ‘aコース’ or ’A course’);

(上記の5例は試した方法の例であり、いづれも正しいものを抽出致しません。)

$arrval=Array(Aコース)

(上記の様に選択肢が一つの場合は正しいものを抽出)

回答

flied_onion様、

ご教授いただきまして感謝いたします。

見事に思い通りの結果になりました。様々なことに利用もできそうでございます。

ピンポイントのご回答、そして丁寧にご解説頂きまして感謝の限りでございます。

本当にありがとうございます。

編集 履歴 (0)

抽出という表現がわからないですが、
PDOかなにかで パラメータをバインドしていて
INの中の一つのパラメータ( ? )に配列が自動的に展開されてバインドされてほしいということですかね?

そうであれば、そういう事は出来なかったように思います。
?の方を$arrvalの要素の数に合わせて用意するしかなかったかと。

$where = $GET['product_id'].'!= T1.product_id and T2.delflg = 0 and T1.class IN ( ? , ? , ? )';

に対してであれば

$arrval = Array("Aコース" , "aコース" , "A course");

をバインドできると思います。(実際にバインドしているコードがないのでそのままうまくいくかはわかりませんが)
条件によって$arrvalの要素の数が変わるのであれば、それに合わせて$whereのINの中身を変える必要があります。
単純にはfor文などを使って。
implodeとかstr_repeatを使って工夫することもできるとは思いますが、まずは単純に実現させてみてから改善すればいいでしょう。

なお、Array(Aコース)という書き方をした場合、phpでは Aコースが定数や予約語ではないので自動的に文字列に変換されますが、逆に言えば定数が存在した場合に予期せぬ結果を生むことがありますので、
「Aコース」という文字を設定したいのであれば Array("Aコース")Array('Aコース') のように引用符でくくった方がよいでしょう。なお単一引用符と二重引用符も振る舞いに少し違いがあります。
※ご自分で区別して使っている場合はその限りではありません。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。