PHP in_array函数不支持mysqli_fetch_array

o7jaxewo  于 2023-10-15  发布在  PHP
关注(0)|答案(2)|浏览(108)

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

<?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中选择 red,绿色,blue,yellow 时,in_array无法执行相同操作。在本例中,如果我回显$array,则Web浏览器中会显示 red绿色blue yellow,因此我知道 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";}
}
?>

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

voase2hg

voase2hg1#

在您的SQL版本中,您会得到一条记录,其中应该存在一个名为colors的字段。
但是这个字段包含一个字符串(可能是一个逗号分隔的列表,比如blue,red,...),* 而不是一个数组 *。
因此,当执行in_array($keyword, $array)时,您会触发一个PHP错误(但可能您当前没有设置error_report来显示它们)。
你 * 必须 * 做的是把你在colors字段中得到的内容转换成一个数组。
在这种情况下,它就像上面提到的:

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

或者任何合适的,这取决于colors字段结构。

zzzyeukh

zzzyeukh2#

我用了这个答案。而且它仍然完美地工作。
如果你有一个只有值的数组,你应该使用in_array函数作为这个例子:

$array = array("A", "B", "C");
in_array($string, $array) ? "found" : "not found";

如果你有一个带键的数组,你应该像下面这样使用isset函数:

$array = array("A" => "Result A", "B" => "Result B", "C" => "Result C");
isset($array[$string]) ? "found" : "not found";
or like:
if(isset($array[$string])) { do your stuff... }

相关问题