Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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 PC/tl/sc/pm电子邮件的Codeigniter逻辑_Php_Codeigniter_If Statement_Logic - Fatal编程技术网

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在电子邮件中休息所有在抄送
我还想将电子邮件ID添加到阵列中。因此,如果我从以下几点开始:

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)中
您没有指定使用哪个数据库引擎。此代码假设您使用mysqli,并且您有一个名为$con的连接对象。代码的数据库部分未经测试。但它至少应该让你知道如何进行

代码中的注释应说明发生了什么:

// 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键处的字符串?预期的结果是什么?见我最后的评论。这就是你想要的输出吗?