Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 确定关联数组中是否存在值_Php_Arrays_Pdo - Fatal编程技术网

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

Php 确定关联数组中是否存在值,php,arrays,pdo,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 =

尝试确定数组中是否存在值,如下所示:

$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在sessions['session_id']数组中,因为当我回显数组时,我可以看到该值。但是,函数仍返回“无效会话”。这不是使用in_array函数的正确方法吗?

由于返回单行,您需要循环返回的集合以首先创建数组

$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";
}
->fetch()
始终返回一行,因此您必须循环执行每个
会话id
。您可以这样做:

$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";
}
编辑:有效方法

假设您的
sessions
表有1000个条目,并且您的
$session\u 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";
}

->fetch()
reurns 1行。您需要在循环中创建一个数组,或者使用
->fetchAll()
并检查arrayIt不是一个有效的搜索方法。假设
sessions
表有1000个条目,并且用户的
session\u id
与第一个条目匹配,即使在这种情况下,
while()
循环也将计算1000次。相反,当找到匹配项时,它应该从循环中中断。@RajdeepPaul您是对的。在这种情况下,它可能是可以忽略不计的,就像一门
课程中有1000人一样,我可能希望转到另一所学校的班级。在这种情况下,我肯定会转到另一所学校。:)