Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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 - Fatal编程技术网

有没有一种方法可以比较php中的多个值

有没有一种方法可以比较php中的多个值,php,Php,如果($value['flagS']='Yes'&$value['flagE']='Yes'&$value['flagL']='Yes'&$value['flagL']='Yes'&$value['flagML']='Yes')看到下面的代码并提供帮助,我哪里出了问题,下面的代码也会向我发送电子邮件 $flagquery = "SELECT * FROM approved"; try { $stt = $db->prepare(

如果($value['flagS']='Yes'&$value['flagE']='Yes'&$value['flagL']='Yes'&$value['flagL']='Yes'&$value['flagML']='Yes')看到下面的代码并提供帮助,我哪里出了问题,下面的代码也会向我发送电子邮件

  $flagquery = "SELECT * FROM approved"; 

        try 
        { 

        $stt = $db->prepare($flagquery); 
        $stt->execute(); 
        } 
        catch(PDOException $ex) 
        { 

        die("Failed to run query: " . $ex->getMessage()); 
        } 


        $rows = $stt->fetchAll(); 

        foreach($rows as $value):

        if($value['flagS']=='Yes'& $value['flagE']=='Yes' & $value['flagL']=='Done' & $value['flagML']=='Done'){


        $message = "your request was approved <br/>                     
                                            <br /><br />";

        $subject = "Application $identifier has been approved ";

        $email="xx@xxx.co.xx";


        send_mail($email,$message,$subject);


Blockquote
$flagquery=“选择*来自已批准”;
尝试
{ 
$stt=$db->prepare($flagquery);
$stt->execute();
} 
捕获(PDO异常$ex)
{ 
die(“无法运行查询:”..ex->getMessage());
} 
$rows=$stt->fetchAll();
foreach($行作为$值):
如果($value['flagS']=='Yes'和$value['flagE']=='Yes'和$value['flagL']=='Done'和$value['flagML']=='Done'){
$message=“您的请求已被批准


; $subject=“应用程序$identifier已批准”; $email=”xx@xxx.co.xx"; 发送邮件($email,$message,$subject); 块引用
请小心,我不认为你的情况符合它应该做的。当你可能需要
&
时,使用单个
&
是一个好方法,即


现在将检查所有4个标志值(S、E、L、ML)是否为“是”,然后才返回真。

以更优化的方式写入

$keys_to_match = ['flagS', 'flagE', 'flagL', 'flagML'];
foreach($rows as  $key => $value) {

   if(in_array($key , $keys_to_match) && $value[$key] ==='Yes') {

     // ....
   }
}

您应该在if条件下使用&&if

和操作:

&->将执行按位AND运算,它只是基于 位值。 &&->它将执行逻辑和运算。这只是检查值是否正确 true或false。基于布尔值,它将计算
表达式

我使用位操作设计标志

define("flagS", 1);
define("flagE", 2);
define("flagL", 4);
define("flagML", 8);
define("allFlags", 15); // join all flags (flagS | flagE | flagL | flagML)
它需要更少的数据库空间,您可以非常轻松地检查标志,而无需昂贵的循环。
如果设置了单个标志,请使用

if($storedFlags & flagS) {
    //Flag flagS is set
} else {
    // Flag is not set
}
$required = flagE | flagML;
if( ($storedFlags & $required) == $required) {
    // Flags flagE and flagML are set
} else {
    // No or only one flag is set
}
如果设置了多个,请使用

if($storedFlags & flagS) {
    //Flag flagS is set
} else {
    // Flag is not set
}
$required = flagE | flagML;
if( ($storedFlags & $required) == $required) {
    // Flags flagE and flagML are set
} else {
    // No or only one flag is set
}

若要检查是否已设置全部,只需将$required替换为allFlags或15,前提是标志的计数不变。

您可以在\u array()中使用用于此
&
的函数没有达到您期望的效果。您期望的是
&
。对于逻辑
操作,您错过了一个
&
。应该是
&
理想的情况是,您的数据库会告诉您请求是否被批准。您可以在查询中执行相同的真实性检查并创建一个查询true/false标志。然后您可以在PHP中避免使用此clusterf***香肠,并保持其可读性。