PHP in_array函数不能与mysqli_fetch_array一起使用

时间:2016-01-17 00:56:34

标签: php mysql arrays

如果我不使用MySQL,PHP in_array 函数将按预期工作。在此示例中, if 语句将执行并显示数组包含关键字blue ,因为 in_array 函数能够找到关键字数组中的蓝色

<?php
$keyword = "blue";
$array = array("red", "green", "blue", "yellow");

if (in_array($keyword, $array)) {echo "the array contains keyword $keyword";}
else {echo "the array does not contain keyword $keyword";}
?>
从MySQL中选择红色,绿色,蓝色,黄色时,

in_array 无法执行相同的操作。在此示例中,如果我回显$ array,则在Web浏览器中显示红绿蓝黄,因此我知道 blue 位于$ array变量中。但是, else 语句执行并显示该数组不包含关键字blue

<?php
$keyword = "blue";

$con = new mysqli('domain','username','password','database');
$sql = "select * from colors";
$sql_query = $con->query($sql);

while ($row = mysqli_fetch_array($sql_query)) {
  $array = $row['colors'];

  if (in_array($keyword, $array)) {echo "the array contains keyword $keyword";}
  else {echo "the array does not contain keyword $keyword";}
}
?>

如果有人在这里有任何提示或建议,我当然会很感激。

1 个答案:

答案 0 :(得分:1)

在您的SQL版本中,您将获得一个记录,其中应存在名为colors的字段 但是这个字段包含一个字符串(可能是逗号分隔的列表,类似于blue,red,...),不是数组

因此,当您执行in_array($keyword, $array)时,您会触发PHP错误(但可能您当前没有设置error_report来显示它们)。

必须做的是将colors字段中的内容转换为数组。
在这种情况下就像上面所描述的那样:

$array = explode(',', $row['colors']);

或者根据colors字段结构究竟是什么来适当的。