简体   繁体   English

in_array仅查找第一个值

[英]in_array Finding first Value Only

What I'm trying to do is to assign variables based upon a sql query. 我想做的是基于sql查询分配变量。 The field "County" is a varchar containing the names of 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;

What happens is that in_array is only detecting the very first county in the array. 发生的情况是in_array仅检测到阵列中的第一个县。 If I echo $row, I get this: 如果我回显$ row,我会得到:

OwenPikeParkeOwenOwenScottMorganGreeneHendricksLawrenceSt.JosephWashingtonVigoMorganOwenDuboisJeffersonSwitzerlandMadisonGreeneFayetteMarionOrangeParkeClarkJeffersonFayetteFountainMontgomeryHendricksHowardOwenElkhartMarionHendricksWashingtonTippecanoePutnamWashingtonBrownHendricksJenningsOwenWhitleyKosciuskoPorterVermillionHendricks OwenPikeParkeOwenOwenScottMorganGreeneHendricksLawrenceSt.JosephWashingtonVigoMorganOwenDuboisJeffersonSwitzerlandMadisonGreeneFayetteMarionOrangeParkeClarkJeffersonFayetteFountainMontgomeryHendricksHowardOwenElkhartMarionHendricksWashingtonTippecanoePutnamWashingtonBrownHendricksJenningsOwenWhitleyKosciuskoPorterVermillionHendricks

If I assign the needle as "Owen," echo $Porter returns "Present". 如果我将针分配为“ Owen”,则echo $ Porter返回“ Present”。 All other values echo "Not Present." 所有其他值回显“不存在”。 If I loop it, even "Owen" returns "Not Present" to $Porter. 如果我循环它,即使是“ Owen”也会向“ $ Porter”返回“ Not Present”。 What am I doing wrong here? 我在这里做错了什么?

This also does not work: 这也行不通:

$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;

mysqli_fetch_array only fetches one row. mysqli_fetch_array仅读取一行。 Use while loop to go over all rows: 使用while循环遍历所有行:

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

If you don't want to check per row but want to check if the value exists in any of the rows use mysqli_fetch_all : 如果您不想检查每一行,但想检查该行中是否存在该值,请使用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;

the line 线

$row=mysqli_fetch_array($result,MYSQLI_ASSOC);

will only retrieve the first row of the database. 将仅检索数据库的第一行。

If you want to check every row to see if ANY of them are Porter, then you will need to set the flag to a default of "no", loop your results, and set the flag if you find it: 如果要检查每一行以查看其中是否有Porter,则需要将标志设置为默认值“ no”,循环结果,并在找到标志时进行设置:

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

echo $Porter;

(this is just a basic example; you can optimize it farther by breaking out of the loop when you first find the result for example, but this will do the job) (这只是一个基本示例;例如,您可以在首次找到结果时通过跳出循环来进一步优化它,但这可以完成工作)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM