Php PC/tl/sc/pm电子邮件的Codeigniter逻辑
我有一个这样的数组Php PC/tl/sc/pm电子邮件的Codeigniter逻辑,php,codeigniter,if-statement,logic,Php,Codeigniter,If Statement,Logic,我有一个这样的数组 Array ( [0] => Array ( [PM] => 14 [LD] => 578 [TL] => 56 [SC] => 67 [PC] => ) ) 以上只是PC/PM/TL/LD的ID。然后,我将在数据库查询中使用它们来获取它们的电子邮件ID 我想使用以下逻辑,我的电子邮件模板应该像这样工作 PC在“到”和所有其
Array
(
[0] => Array
(
[PM] => 14
[LD] => 578
[TL] => 56
[SC] => 67
[PC] =>
)
)
以上只是PC/PM/TL/LD的ID。然后,我将在数据库查询中使用它们来获取它们的电子邮件ID
我想使用以下逻辑,我的电子邮件模板应该像这样工作
PC在“到”和所有其他抄送
- 如果未分配PC,则TL将发送电子邮件至rest all in cc
- 如果没有TL,则将LD发送至电子邮件,其余全部发送至cc
- 如果没有LD,则PM in发送电子邮件至rest all in cc
- 如果没有下午,然后SC在电子邮件中休息所有在抄送
Array (
[PC] =>
[TL] => 1109
[LD] => 838
[PM] => 715,824,694
[SC] => 727
)
我将执行此SQL($user\u SQL):
选择id、电子邮件
从新登录
其中id位于(1109838715824694727)
和状态=1
要输出:
Array (
[694] => a@exateam.com
[715] => b@gmail.com
[727] => c@gmail.com
[824] => d@gmail.com
[838] => e@gmail.com
[1109] => m@gmail.com
)
以下代码将:
- 根据两个字母代码的优先级对给定ID进行排序李>
- 创建一个ID列表,将多个ID字符串拆分为单独的数组元素李>
- 查询数据库以接收相应的电子邮件地址
- 将这些电子邮件地址以键/值对(ID/email)的形式存储在右侧数组变量($to或$cc)中
// Example data:
$data = Array (
Array ("PM" => "715,824,694", "LD" => "838", "TL" => "1109",
"SC" => "727", "PC" => null)
);
// Define the priority order of the different two letter codes:
$order = array_flip(array("PC", "TL", "LD", "PM", "SC"));
// Iterate over the data
foreach ($data as $row) {
// Order $row elements by priority and filter out empty values:
$row = array_filter(array_merge($order, $row));
// if nothing is left over, then skip this row
if (count($row) == 0) continue;
// Count the number of IDs in "TO" addressee:
$to_count = count(explode(',', array_values($row)[0]));
// Create one list of IDs and turn comma-separated items
// into separate array elements:
$row = explode(',', implode(',', $row));
// Initialise arrays that will receive the email addresses for TO / CC
$to = array();
$cc = array();
// Retrieve email addresses from database.
// You need a valid mysqli connection object: $con
// Prepare SQL statement to avoid SQL injection, and produce
// the right number of question marks in it:
$query = "SELECT id,email FROM new_login WHERE status = 1
AND id IN (" . implode(',', array_fill(0, count($row), '?')) . ") ";
$stmt = $con->prepare($query) or die($con->error());
// Bind the ID values to prepared SQL statement
call_user_func_array(array($stmt, 'bind_param'), $row);
// Execute SQL query
$stmt->execute();
// Fetch result into array
$res = $stmt->get_result();
while($email = $res->fetch_array(MYSQLI_ASSOC)) {
// Check whether it concerns a TO or CC address:
if (array_search($email["id"], $row) < $to_count) {
$to[$email["id"]] = $email["email"];
} else {
$cc[$email["id"]] = $email["email"];
}
}
$stmt->close();
// use $to and $cc to send email
// ...
}
//示例数据:
$data=数组(
数组(“PM”=>“715824694”、“LD”=>“838”、“TL”=>“1109”,
“SC”=>“727”,“PC”=>空)
);
//定义不同两个字母代码的优先级顺序:
$order=阵列翻转(阵列(“PC”、“TL”、“LD”、“PM”、“SC”);
//迭代数据
foreach($行数据){
//按优先级排序$行元素并过滤掉空值:
$row=数组\过滤器(数组\合并($order,$row));
//如果没有剩余内容,则跳过这一行
如果(计数($row)==0)继续;
//计算“收件人”中的ID数:
$to_count=计数(分解(',',数组_值($row)[0]);
//创建一个ID列表并将逗号分隔的项
//分为不同的数组元素:
$row=爆炸(',',内爆(',',$row));
//初始化将接收TO/CC电子邮件地址的阵列
$to=array();
$cc=array();
//从数据库检索电子邮件地址。
//您需要一个有效的mysqli连接对象:$con
//准备SQL语句以避免SQL注入,并生成
//其中正确数量的问号:
$query=“选择id,从状态为1的新登录名发送电子邮件
和id(“.introde(',',数组填充(0,count($row),'?))”);
$stmt=$con->prepare($query)或die($con->error());
//将ID值绑定到准备好的SQL语句
调用_user_func_数组(数组($stmt,'bind_param'),$row);
//执行SQL查询
$stmt->execute();
//将结果提取到数组中
$res=$stmt->get_result();
而($email=$res->fetch_数组(MYSQLI_ASSOC)){
//检查它是否与TO或CC地址有关:
if(数组搜索($email[“id”],$row)<$to\u计数){
$to[$email[“id”]=$email[“email”];
}否则{
$cc[$email[“id”]=$email[“email”];
}
}
$stmt->close();
//使用$to和$cc发送电子邮件
// ...
}
您尝试过什么?您的代码示例是什么样子的?失败的部分是什么?试着给读者更多的信息你使用哪个数据库?您使用哪些函数来连接和检索数据(mysqli_?PDO?)。如果我得到多个值,比如数组([PC]=>[TL]=>645[LD]=>838[PM]=>715824694[SC]=>727),您对[PM]=>715824694
的确切含义是什么?它是字符串“715824694”
,还是类似于[PM]=>数组(715824694)
?请注意,您当前的所有值都是数字,如果在需要数字的位置出现字符串或数组,则会很奇怪。你能澄清一下吗?另外,请具体说明你期望得到什么样的结果。您希望将这些组合ID(告诉我它们是字符串还是数组)分隔为数字吗?然后,您是否仍然需要这两个字母单词(PM,TL,…),或者只为to提供一个ID数组,为CC提供一个数组,比如$CC=array(838,715,824,694,727)
,您的示例中是指数组还是数组的PM键处的字符串?预期的结果是什么?见我最后的评论。这就是你想要的输出吗?