2011-12-31 51 views
1

我有一個變量,我得到了這樣的數據庫表:如何檢查多個值的數組?

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

的東西變量看起來是這樣的:「汽車,書籍,電腦,食品」和我做了一個數組:

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

現在我要檢查它的值,如:

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..."; 
} 

我從這個得到的輸出是:不是「汽車與書」「只有汽車」。

那麼我怎樣才能讓我的代碼檢查數組的2個或更多的值,然後繼續其if/elseif語句? in_array函數可能嗎?

瓦爾轉儲:

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

你的代碼看起來很好。有什麼問題? – 2011-12-31 21:45:56

+0

你能給我一個'var_dump($ array_of_stuff)'的輸出嗎? – Lars 2011-12-31 21:46:47

+0

@MДΓΓБДLL我希望它檢查2個值的數組,但它不。我不知道爲什麼,但它不明白該數組有2個值,我正在尋找它。 – randomphp 2011-12-31 21:48:16

回答

1

如果$ array_of_stuff實際上被設置爲explode(",","cars, books, computers, foods"),如前所述,那麼該數組將在其他值之前具有前導空格比汽車。 in_array()函數與目標元素的子字符串不匹配,所以「books」不會與數組中的「books」匹配。

如果你需要解析一個這樣的字符串,你需要確保你有一個確切的格式定義,這樣你才能正確地將它解析成一個數組。如果「,」是唯一的分隔符,並且該序列始終代表分隔符(例如,它不會被轉義或引用),那麼可以將explode(",",...)更改爲explode(", ",...)。如果這是您要存儲的數據,請注意,您不應該創建自己的格式。相反,使用類似於serialize()(只能PHP理解)或json_encode()(這是高度可移植的)將本機類型轉換爲字符串(以及相應的解碼函數來解碼它)。

除此之外,將數組存儲在SQL錶行的某個字段中通常(但並非總是)表明該模式是錯誤的。

-1

是,可以檢查2或多個針與in_array(),在第一個參數將它們作爲數組:

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

參見php.net,例如#3

+0

感謝您的答案,但我仍然得到相同的輸出,「只有汽車」,而不是它找到兩個值。 – randomphp 2011-12-31 21:57:27

+1

修剪「書籍」等的前導空格 – 2011-12-31 22:00:33

+3

傳遞數組作爲in_array()的第一個參數搜索該數組的匹配(它會查找'array('cars','books')' $ array_of_stuff')。它不搜索多個針頭。最好把它放在'foreach($ needleles $ needle){...}' – Brendan 2012-11-07 22:07:53