Php 电子邮件类中使用关联数组的Codeigniter
我有一个特定的关联数组,其中包含一个电子邮件列表。具体如下:Php 电子邮件类中使用关联数组的Codeigniter,php,arrays,codeigniter,email,Php,Arrays,Codeigniter,Email,我有一个特定的关联数组,其中包含一个电子邮件列表。具体如下: Array ( [0] => Array ( [email] => mattfairburne@hotmail.com ) [1] => Array ( [email] => velazquez.alvaro@gmail.com ) [2] => Array
Array
(
[0] => Array
(
[email] => mattfairburne@hotmail.com
)
[1] => Array
(
[email] => velazquez.alvaro@gmail.com
)
[2] => Array
(
[email] => pstangerson_1968@gmail.com
)
[3] => Array
(
[email] => anuj.galgotia@gmail.com
)
)
它由以下控制器代码生成:
$data['list_of_emails'] = $this->Trainee_requisition->get_list_of_emails($id);
以及访问电子邮件($id)方法的get\u list\u的相应模型代码:
function get_list_of_emails($id){
$q = $this->db->query("SELECT `email` FROM `requisition_emails` WHERE `req_id` = $id")->result_array();
return $q;
}
在Codeigniter文档中,我在Email类的$this->mail->to()
方法中找到了一种传递一维数组的方法,但是没有关联数组的示例
我的问题是,如何在$this->email->to()
方法中使用上述关联数组
我的主要目标是生成如下内容:
$email_list = array('mattfairburne@gmail.com', 'velazquez_alvaro@gmail.com', 'pstangerson_1968@gmail.com', 'anuj.galgotia@gmail.com');
$this->email->to($email_list);
$q = $this->db->query("SELECT rem.`email`, sr.`is_approve` AS approval_status FROM `requisition_emails` rem INNER JOIN `staff_requisitions` sr ON sr.`id` = rem.`req_id` WHERE rem.`req_id` = $id")->result_array();
编辑:
虽然的答案是最简单的解决方案,并且完全满足了我的需要,但我仍然希望答案能够提供一种方法,从具有多个列的查询中只检索一列
例如,如果我的查询修改如下:
$email_list = array('mattfairburne@gmail.com', 'velazquez_alvaro@gmail.com', 'pstangerson_1968@gmail.com', 'anuj.galgotia@gmail.com');
$this->email->to($email_list);
$q = $this->db->query("SELECT rem.`email`, sr.`is_approve` AS approval_status FROM `requisition_emails` rem INNER JOIN `staff_requisitions` sr ON sr.`id` = rem.`req_id` WHERE rem.`req_id` = $id")->result_array();
但是我只想从列表中使用email
列,那么最好的方法是什么
编辑-2:
忘了提了。PHP版本是5.3。您需要在视图中使用foreach
循环
试一试
foreach($list_of_emails as $email)
{
echo $email."<br />";
// You can call '$this->mail->to()' to mail.
}
foreach($email作为$email列出电子邮件)
{
回显$email.“
”;
//您可以调用“$this->mail->to()”来发送邮件。
}
试试这可能会解决您的问题
$query->result_array();
它将给出一维数组您可以简单地array\u column
如下
$new_array = array_column('email');
这应该管用
<?php $array = array(array("email" => "mattfairburne@hotmail.com"), array("email" => "velazquez.alvaro@gmail.com")); $emailList = array_map('current', $array); print_r($emailList);
根据CI文档,您可以使用以下结构向多个收件人发送电子邮件:
$this->email->to('one@example.com, two@example.com, three@example.com');
要生成此类字符串,请执行以下步骤:
不要碰你的模型
使用PHP内爆
和array\u column
函数提取电子邮件
字段,并用逗号连接所有数组元素:
$data['list_of_emails']=$this->Trainee_requisition->get_list_of_emails($id);//Get data from model as one dimensional string
$email_list = implode(',',array_column($data['list_of_emails'],'email'));//Implode array elements with comma as separator
$this->email->to($email_list);
通过调用var\u dump($email\u list),您可以打印$email\u list
,以确保格式正确;退出代码>
编辑(如果您使用的是PHP<5.5)
使用array\u map
函数,将第一个参数设为anyonimus函数。通过定义$columnName
,可以提取所需的任何列
$columnName = "email";
$result = array_map(
function ($arrayRow) use ($columnName){
return $arrayRow[$columnName];
}
,$data['list_of_emails']);
var_dump(implode(",",$result));
$this->email->to($result );
我已经使用了你的方法,但是邮件只发送到最后一个id,即anuj。galgotia@gmail.com
不要对其他人说。谢谢,伙计,它起作用了。问题出在我的后续代码中,我使用了die()
。这就是为什么电子邮件总是只发送到一个地址。另外,我不得不把$this->email->send()
放在foreach()
里面。伙计,你能更新你的答案吗?我已经更新了我的问题,并寻找另一个小的增强。我想你没有正确地看到我的问题。我在模型代码中使用了result\u array()
方法。在我的问题中,为了方便起见,我只获取了查询中的一列。如果我重新编写查询,使其返回多个列,该怎么办?那么我如何获取电子邮件
?有更新,请检查并尝试!我正在测试。我一会儿再告诉你。谢谢array\u column()
不适用于早于5.5的PHP版本。我的是5.3。这是你编辑问题后的评论。为了从您的模型中只检索一列提交的数组,请使用array_column函数,我在回答中使用了该函数。啊,最后:)看看更新的答案!