dポイントプレゼントキャンペーン実施中!

PHPでMySQLのデータベースを参照するSQL文を書いています。

room_equipment

というテーブル内に

area

という項目があり、この中は
1,3,5,8
のように、複数の数字がコンマ区切りで入っています。

分からないなりに

<?php if($room_equipment['area']==6){ echo '当たり'; } else { echo '外れ'; } ?>

と書いてみたのですが、これだと、

area

の項目内の先頭に6が来ているときは「当たり」と表示されるものの、

項目内が

1,3,5,6

というような内容のときには「はずれ」と表示されます。

たぶん、== というのは単純に「等しい」ことを差しており、
「含まれている」という意味ではないのではないかと思いました。

いろいろレクチャーサイトをのぞいてみましたが、
「項目に含まれている」ということを指し示す演算子は
どのようなもので、上記のコードはどのように修正すれば良いでしょうか?

どなたか、教えていただけますと大変助かります。
よろしくお願いいたします。

A 回答 (2件)

・コンマ区切りの数字の列をコンマで分割し、おのおの数字を配列に格納する


・配列を検索し、値が探している数字である要素があるか調べる

といったことで実現できると思います。

$area_array = explode(',', $room_equipment['area']);
if(in_array('6', $area_array, true)){
echo '当たり';
} else {
echo '外れ';
}



> たぶん、== というのは単純に「等しい」ことを差しており、
> 「含まれている」という意味ではないのではないかと思いました。

「含まれている」という意味ではないですね。
== は「等しい」で大抵うまくいくんですが、
はまることもあります。

> 項目内の先頭に6が来ているときは「当たり」と表示される

この場合、例えば '6,1,3,5' と 6 が等しいと判断されているわけですね。

比較演算子
http://www.php.net/manual/ja/language.operators. …

PHPの==がキモい件
http://d.hatena.ne.jp/hnw/20080606

explode
http://www.php.net/manual/ja/function.explode.php

in_array
http://www.php.net/manual/ja/function.in-array.php
    • good
    • 0
この回答へのお礼

ありがとうございました!
うまく実装できました!

コードを書いていただけたので、
それを分解して考えることができるので非常に参考になりました。

お礼日時:2011/08/25 20:45

いくつかの考え方があるので紹介します



MySQLで解決する
(1)そもそもSQLをつかっているなら、絞り込みはSQL側で行う
(2)データの持ち方がへんなので正規化をしてデータを個別管理する

PHPで解決する
(3)カンマ区切りならカンマで分かち配列を走査する
<?PHP
$str="1,3,5,8";
if(in_array("5",explode(",",$str))) print "5 ok<br>\n";
if(in_array("6",explode(",",$str))) print "6 ok<br>\n";
if(in_array("8",explode(",",$str))) print "8 ok<br>\n";
?>

(4)正規表現
<?PHP
$str="1,3,5,8";
if(preg_match("/(^|,)5(,|$)/",$str)) print "5 ok<br>\n";
if(preg_match("/(^|,)6(,|$)/",$str)) print "6 ok<br>\n";
if(preg_match("/(^|,)8(,|$)/",$str)) print "8 ok<br>\n";
?>
    • good
    • 0
この回答へのお礼

ありがとうございました。
preg_matchという記述は初めて知りましたので、勉強してみます。

お礼日時:2011/08/25 20:44

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