0

我正在尝试从数组循环向用户发送电子邮件。每封电子邮件可以出现在多个数组元素中,但除了电子邮件之外,其余元素是不同的。

我在下面有这段代码,它试图创建两个新数组 - 一个只包含电子邮件,而另一个包含其他值,例如“名称”等。我最终需要的是一个具有以下内容的数组:

$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()等但没有运气,顺便说一句。

任何想法?谢谢。

4

2 回答 2

1

让我们有两个数组:

$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...
于 2013-01-24T20:02:23.090 回答
0

这是我修复它的方法。请注意,在新代码中,$emails 与 $$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数组的东西。很值得。

谢谢。

于 2013-01-28T19:47:42.327 回答