【问题标题】:How to check array for multiple values?如何检查数组的多个值?
【发布时间】:2012-01-31 05:17:50
【问题描述】:

我有一个从数据库表中取出的变量,如下所示:

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

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 函数可以吗?

变量转储:

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

【问题讨论】:

  • 您的代码看起来还不错。有什么问题?
  • 能否请您提供var_dump($array_of_stuff)的输出?
  • @MДΓΓ БДLL 我希望它检查数组中的 2 个值,但它没有。我不知道为什么,但它不明白该数组有 2 个我要在其中寻找的值。
  • 将 var_dump($array_of_stuff) 的输出添加到您的问题中,解决方案可能会立即出现。
  • 你需要修剪前导空格!

标签: php mysql arrays variables


【解决方案1】:

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

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

数组的值按照数组的内部顺序复制到列出的变量中。默认情况下,这是它们被插入的顺序,但是稍后描述的排序函数可以让你改变它。这是一个例子:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      参见php.net,示例#3

      【讨论】:

      • 感谢您的回答,但我仍然得到相同的输出,“只有汽车”而不是找到两个值。
      • 去掉“书”等前导空格
      • 传递一个数组作为 in_array() 的第一个参数会搜索该数组的匹配项(它会在 $array_of_stuff 中查找 array('cars','books'))。它不会搜索多个针头。最好把它放在foreach($needles as $needle) { ... }
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多