如何检查数组的多个值?

时间:2011-12-31 21:44:37

标签: php mysql arrays variables

我有一个我从数据库表中得到的变量:

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

我得到的输出是:“只有汽车”而不是“汽车和书籍”。

那么在继续if / elseif语句之前,如何让我的代码检查数组中的2个或更多值?是否可以使用in_array函数?

Var Dump:

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

3 个答案:

答案 0 :(得分:1)

如果$ array_of_stuff实际上设置为explode(",","cars, books, computers, foods"),那么数组将在除汽车之外的值之前具有前导空格。 in_array()函数与目标元素的子字符串不匹配,因此“books”与数组中的“books”不匹配。

如果你需要解析这样的字符串,你需要确保你有一个确切的格式定义,这样你就可以正确地将它解析成一个数组。如果“,”是唯一的分隔符,并且该序列始终表示分隔符(例如,它不会被转义或引用),那么您可以将explode(",",...)更改为explode(", ",...)。如果这是您要存储的数据,请注意您不应该创建自己的格式。相反,使用serialize()(只有PHP理解)或json_encode()(高度可移植)之类的东西将本机类型转换为字符串(以及相应的解码函数来解码它)。

除此之外,将数组存储在SQL表的一行字段中通常(但并不总是)表明模式是错误的。

答案 1 :(得分:0)

要将所有数组的值复制到变量中,请使用list()构造:

list($variable, ...) = $array;

数组的值以数组的内部顺序复制到列出的变量中。默认情况下,它们是插入的顺序,但稍后描述的排序功能允许您更改它。这是一个例子:

$person = array('name' => 'Mizan', 'age' => 26, 'wife' => 'Mita');
list($name, $age, $wife) = $person;

答案 2 :(得分:-1)

是的,您可以使用in_array()检查2个或更多针,在第一个参数中将它们作为数组传递:

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

参见php.net,示例#3