确定关联数组中是否存在值

时间:2015-11-13 17:12:53

标签: php arrays pdo

尝试确定数组中是否存在这样的值:

$course_id = 1;

$sessions_query = $db->prepare("SELECT session_id FROM sessions WHERE course_id=:course_id");
$sessions_query ->bindValue(':course_id', $course_id, PDO::PARAM_INT);
$sessions_query ->execute();
$sessions = $sessions_query ->fetch(PDO::FETCH_ASSOC);

$session_id = 1;

if (in_array($session_id, $sessions['session_id'])) {
    echo "Valid session";
}
else {
    echo "Invalid session";
}

我知道值1在会话[' session_id']数组中,因为当我回显数组时,我可以看到该值。但是,该功能仍在返回"无效会话"。这不是使用in_array函数的正确方法吗?

2 个答案:

答案 0 :(得分:2)

->fetch()总是返回一行,因此您必须遍历每个session_id。你会做这样的事情:

编辑:有效方法

假设您的sessions表有1000个条目,而您的$session_id与表中的第一个条目匹配。在这种情况下,while()循环将不会评估1000次,当找到匹配时,它将从循环中突破。

$course_id = 1;

$sessions_query = $db->prepare("SELECT session_id FROM sessions WHERE course_id=:course_id");
$sessions_query ->bindValue(':course_id', $course_id, PDO::PARAM_INT);
$sessions_query ->execute();

$session_id = 1;

$session_value_exists = false;
while($sessions = $sessions_query->fetch(PDO::FETCH_ASSOC)){
    if ($session_id == $sessions['session_id'])) {
        $session_value_exists = true;
        break;    
    }
}
if($session_value_exists){
    echo "valid session";
}else{
    echo "invalid session";
}

答案 1 :(得分:1)

PDOStatement::fetch()返回一行时,您需要遍历返回的集合以首先创建一个数组。

$course_id = 1;

$sessions_query = $db->prepare("SELECT session_id FROM sessions WHERE course_id=:course_id");
$sessions_query ->bindValue(':course_id', $course_id, PDO::PARAM_INT);
$sessions_query ->execute();
$sessions = array();
while($row = $sessions_query ->fetch(PDO::FETCH_ASSOC)){
    $sessions[] = $row['session_id'];
}

$session_id = 1;

if (in_array($session_id, $sessions)) {
    echo "Valid session";
}
else {
    echo "Invalid session";
}