如果我不使用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";}
}
?>
如果有人在这里有任何提示或建议,我当然会很感激。
答案 0 :(得分:1)
在您的SQL版本中,您将获得一个记录,其中应存在名为colors
的字段
但是这个字段包含一个字符串(可能是逗号分隔的列表,类似于blue,red,...
),不是数组。
因此,当您执行in_array($keyword, $array)
时,您会触发PHP错误(但可能您当前没有设置error_report来显示它们)。
必须做的是将colors
字段中的内容转换为数组。
在这种情况下就像上面所描述的那样:
$array = explode(',', $row['colors']);
或者根据colors
字段结构究竟是什么来适当的。