2011-12-31 11 views
1

は、私は、このようなデータベーステーブルの外に出た変数がある:配列を複数の値でチェックする方法は?

while($r = mysql_fetch_array($query) //The query is just: SELECT * FROM stuff_table WHERE userid='$userid' 
{ 
$stuff = $r['stuff']; 
} 

スタッフ変数は次のようになります。「自動車、書籍、コンピュータ、食品」と私はそれを配列作っ:

if(in_array("cars", $array_of_stuff) && in_array("books", $array_of_stuff)) 
{ 

//This line is the problem, I want it to check to see if it has "cars" and "books" in the array but this code is not working for that like it should. Instead of checking and finding both, it just goes on to the next elseif. 

echo "Cars and Books"; 
} elseif(in_array("cars")) { 
// 
echo "Only cars"; 
} elseif(in_array("books")) { 
echo "Only books"; 
} else { 
echo "Other stuff..."; 
} 

私はここから得る出力は次のとおりです:代わりに「車書籍」の「だけ車」

//I used: 
$array_of_stuff = explode(",", $stuff); //This gave me an array. 

は今、私はこのように、その値を確認したかったです。

if/elseif文を続行する前に、コードが2つ以上の値の配列をチェックするようにするにはどうすればよいですか? in_array関数で可能ですか?

ヴァールダンプ:

array(4) { [0]=> string(4) "cars" [1]=> string(6) " books" [2]=> string(10) " computers" [3]=> string(6) " foods" } 
+0

コードはきれいに見えます。問題は何ですか? –

+0

'var_dump($ array_of_stuff)'の出力をお願いしますか? – Lars

+0

@MДΓΓБДLL2つの値の配列をチェックしたいが、そうではない。私は理由を知らないが、配列に2つの値があることを理解していない。 – randomphp

答えて

1

説明したように$ array_of_stuffが実際にexplode(",","cars, books, computers, foods")に設定されている場合、配列の先頭には他の値の前にスペースがあります車よりも。 in_array()関数は、対象要素の部分文字列と一致しないため、配列の "books"と "books"は一致しません。

このような文字列を解析する必要がある場合は、その文字列を正しく解析できるように、その形式が正確に定義されていることを確認する必要があります。 "、"が唯一の区切り文字であり、そのシーケンスが常に区切り文字を表す場合(たとえば、エスケープまたは引用されたことはありません)、explode(",",...)explode(", ",...)に変更できます。これが保存しているデータの場合は、独自のフォーマットを作成しないでください。その代わりに、(PHPだけが理解できる)やjson_encode()(移植性の高いもの)などを使用して、ネイティブタイプを文字列に変換します(対応するデコード関数でデコードします)。

それ以外にも、SQLテーブルの行のフィールドに配列を格納することは、スキーマが間違っていることを示している場合があります。

-1

はい、あなたは、in_array()で2本の以上の針を確認する配列として、最初の引数に渡すことができます。

$searchStuff = array('cars','books'); 
if(in_array($searchStuff, $array_of_stuff)){ 
    // both found 
} 

php.net例を参照してください#3

+0

答えをありがとうが、私はまだ両方の値を見つけるのではなく、 "車だけ"と同じ出力を得ています。 – randomphp

+1

"books"などの先頭スペースを切り捨てます。 –

+3

in_array()の最初の引数として配列を渡すと、その配列の一致が検索されます( 'cars '、' books ')' $ array_of_stuff')。それは複数の針を検索しません。 'foreach($ needle as $ needle){...}'に入れるのがベスト – Brendan

関連する問題