有没有一种方法可以比较php中的多个值
如果($value['flagS']='Yes'&$value['flagE']='Yes'&$value['flagL']='Yes'&$value['flagL']='Yes'&$value['flagML']='Yes')看到下面的代码并提供帮助,我哪里出了问题,下面的代码也会向我发送电子邮件有没有一种方法可以比较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(
$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***香肠,并保持其可读性。