in_array仅查找第一个值

时间:2019-01-23 21:13:40

标签: php mysqli-fetch-array

我想做的是基于sql查询分配变量。 “ County”字段是一个包含Counties名称的varchar。

 $sql="SELECT County from GAINLP WHERE SpeciesName LIKE '%Actias_luna%'";
    ($result=mysqli_query($connect,$sql));
    $row=mysqli_fetch_array($result,MYSQLI_ASSOC);

    if (in_array("Porter", $row))  {
                $Porter='Present';
                    }
                else {$Porter='Not Present';
                     };
    echo $Porter;

发生的事情是in_array仅检测到阵列中的第一个县。如果我回显$ row,我会得到:

欧文·派克·帕克欧文·欧文·斯科特·摩根·格林·亨德里克斯

如果将针分配为“ Owen”,则echo $ Porter返回“ Present”。所有其他值回显“不存在”。如果我循环它,即使是“ Owen”也会向“ $ Porter”返回“ Not Present”。我在这里做什么错了?

这也不起作用:

$sql="SELECT County from GAINLP WHERE SpeciesName LIKE '%Actias_luna%'";
    ($result=mysqli_query($connect,$sql));
    while ($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) {

    if (in_array("Porter", $row))  {
                $Porter='Found it';
                    }
                else {$Porter='Didn\'t Find it';
                }};
    echo $Porter;

2 个答案:

答案 0 :(得分:0)

mysqli_fetch_array仅读取一行。使用while循环遍历所有行:

while ($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) {

如果您不想检查每一行,而是想检查该行中是否存在该值,请使用mysqli_fetch_all

$sql="SELECT County from GAINLP WHERE SpeciesName LIKE '%Actias_luna%'";
$result=mysqli_query($connect,$sql);
$rows=mysqli_fetch_all($result,MYSQLI_ASSOC);
if (in_array("Porter", $rows))  {
    $Porter='Present';
} else {
    $Porter='Not Present';
};
echo $Porter;

答案 1 :(得分:0)

线

$row=mysqli_fetch_array($result,MYSQLI_ASSOC);

将仅检索数据库的第一行。

如果要检查每一行以查看其中是否有Porter,则需要将标志设置为默认值“ no”,循环结果,并在找到标志时设置标志:

$Porter="Not Present";
while($row = mysqli_fetch_array($result,MYSQLI_ASSOC)){
    if($row['County'] == "Porter"){
        $Porter = "Present";
    }
}

echo $Porter;

(这只是一个基本示例;例如,当您首次找到结果时,可以通过跳出循环来进一步优化它,但这可以完成工作)