[英]php merge arrays based on a value
我正在尝试从数组循环向用户发送电子邮件。 每个电子邮件可以存在于多个数组元素中,但是除电子邮件以外,其余元素都是不同的。
我在下面的代码中尝试创建填充两个新的数组-一个仅包含电子邮件,而另一个包含其他值,例如'name'等。我最后需要的是一个具有类似内容的数组:
$array_final(
[0]email=>'whatever@com'=> (name1, name 2),
[1]email=>"second@.com"=>name3,name4
);
这是我的数组和循环:
$array_emailedinfo_email = array();//will hold just email
$array_emailedinfo = array();//will hold email and other date;
foreach($array_expiredmeetingscos as $mail) {
if(isset($checkAgainst[$mail[1]])) {
$array_emailedinfo_email[] = array(
"email" => $checkAgainst[$mail[1]]
);
$array_emailedinfo[] = array(
"email" => $checkAgainst[$mail[1]],
"name" => $mail[2]
);
}
}
我想我也许可以在foreach
循环中获取最终的数组,但还没有弄清楚。 我试过array_merge()
等,但是没有运气,顺便说一句。
任何想法? 谢谢。
我们有两个数组:
$emails = array(array('email' => 'foo@example.com'), array('email' => 'bar@example.com');
$emails_info = array(array('email' => 'foo@example.com', 'name' => 'Alice'), array('email' => 'bar@example.com', 'name' => 'Bob'));
现在,您想遍历$emails
并在$emails_info
找到适当的值:
foreach ($emails as $email) {
$info = array_filter($emails_info, function($item) use ($email) {
return $item['email'] == $email['email'];
});
// because $emails_info[index]['email'] might not be unique, $info is array of such items
print_r($info);
}
但是我认为用给定的电子邮件索引一个或两个数组会容易得多,例如
//variable from your question
$array_emailedinfo['foo@example.com'] = array(array('email' => 'foo@example.com', 'name' => 'Alice'));
编辑
在数组中查找适当项目的函数:
function find_in_emails($emails_info, $email) {
foreach ($emails_info as $email_info) {
if ($email_info['email'] == $email)
return $email_info;
}
//not found...
return array();
}
//usage
//...loop...
$info = find_in_emails($emails_info, $email['email']);
//...endloop...
这是我固定的方法。 注意,在新代码中,$ emails与原始Question中的$$ array_emailedinfo_email相同,而$ emails_info与$ array_emailedinfo相同。
$array_all_expired_info = array();
$i=0;
$temparray = array();
foreach ($emails as $email) {
if (is_array($email)) {
$array_all_expired_info[$i] = $email;
foreach($emails_info as $all_info) {
if (in_array($email["email"],$all_info)) {
$array_all_expired_info[$i][] = $all_info;
}
}
}
$i++;
}//对于
最终的数组接近于我所需要的:第一个元素只是电子邮件,其余元素是各个元素内的数组。 因此,现在我可以遍历所有元素,获取电子邮件,然后获取相应的数据(每个电子邮件可能是多个),然后简单地发送电子邮件。
这一切都不容易。 但是在此过程中了解了有关php数组的一些知识。 非常值得。
谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.