如何使用PHP检查数组中是否存在值

时间:2016-07-31 13:31:50

标签: php mysql arrays

我正在尝试使用PHP检查数组列表中是否存在用户输入值。这是我的代码:

$chkvalue=$_POST['id'];

$sql=$dbh->prepare("my query hear");
$sql->execute();
$memers=$sql->fetch(PDO::FETCH_BOTH);

我在数组$memers中得到了我的值列表。当我使用var_dump($memers);时,我可以看到数组中的所有值。现在,我想查看数组$chkvalue中存在的天气$memers

我尝试了以下代码:

if (in_array($chkvalue ,$memers)) {
   echo "Value exists";
  } else {
    echo "Value doesn't exists";
    }

但是,它始终显示Value doesn't exists

例如:我的数组包含{23568,456982,123489,125895,154879,124648}

现在我想检查该数组中是否存在456982。

我尝试了FETCH_NUM

我得到了以下结果

array(5) { [0]=> string(6) "600258" [1]=> string(15) "A SURYANARAYANA" [2]=> string(6) "420575" [3]=> string(1) "A" [4]=> string(10) "2016-07-05" } 

array(5) { [0]=> string(6) "223511" [1]=> string(20) "A UMA MAHESWARA RAO" [2]=> string(6) "600258" [3]=> string(1) "A" [4]=> string(10) "2016-07-05" }

 array(5) { [0]=> string(6) "907774" [1]=> string(19) "A UMA MAHESWARA RAO" [2]=> string(6) "223511" [3]=> string(1) "A" [4]=> string(10) "2016-07-05" } 

array(5) { [0]=> string(6) "688108" [1]=> string(13) "M BALA BALAJI" [2]=> string(6) "907774" [3]=> string(1) "A" [4]=> string(10) "2016-07-05" } 

3 个答案:

答案 0 :(得分:1)

可能是你的问题与使用PDO :: FETCH_BOTH检索值的事实有关所以$ nemers包含结果我有几种不同的方式

然后尝试使用

$memers=$sql->fetch(PDO::FETCH_NUM);

但是如果你的结果是一个关联数组,你应该像我们这样的somthings

<?php
    $chkvalue=$_POST['id'];
    $sql=$dbh->prepare("SELECT * FROM ???"); // Put a table name where the ? is.
    $sql->execute();
    while($row = $sql->fetch(PDO::FETCH_ASSOC))
    {
        foreach ($$row as $key => $value) {
          if ( $value == $chkvalue ) {
             echo "Value exists";
          }

        }
    }
?>

答案 1 :(得分:0)

我不明白为什么人们会投反对票。总有一个选择可以讨论。我怎么得到我的答案in_array不适用于多维数组,所以下面的代码工作

function in_array_r($needle, $haystack, $strict = false) {
    foreach ($haystack as $item) {
        if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
            return true;
        }
    }

    return false;
}

和数组

if(in_array_r($chkvalue, $memers)){
        echo 'found';
        }else{
            echo 'Not Found';       
            }

答案 2 :(得分:-2)

我强烈建议您使用$stmt->fetch(PDO::FETCH_ASSOC)代替$stmt->fetch(PDO::FETCH_BOTH)。您可以在php或实际命令中执行您正在寻找的内容。

PHP:

<?php
$chkvalue=$_POST['id'];
$sql=$dbh->prepare("SELECT * FROM ???"); // Put a table name where the ? is.
$sql->execute();
while($row = $sql->fetch(PDO::FETCH_ASSOC))
{
    $lookup_value = '20485930';
    if($lookup_value === $row['column_name'])
    {
        // Here is a match
    }
}
?>

带PDO的SQL

<?php 
$chkvalue=$_POST['id'];
$sql=$dbh->prepare("SELECT * FROM ??? WHERE ??? = :value"); // Put a table name 
$sql->bindValue(':value', $value_name, PDO::PARAM_STR);
// $value_name is a placeholder for the actual value to put here. 
$sql->execute();
if($sql->num_rows > 1)
{
    // You have multiple inserts for this value
}
else 
{
    // You have only one value.
}
?>

希望这有帮助。