php合并基于值的数组

时间:2013-01-24 17:09:46

标签: php arrays loops

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

我在下面的代码中尝试创建两个新数组 - 一个只有电子邮件而另一个有其他值,例如'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()等但没有运气,顺便说一句。

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分: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...

答案 1 :(得分:0)

以下是我修复它的方法。请注意,在新代码中,$ emails与$$ array_emailedinfo_email相同,$ emails_info分别与原始Question中的$ 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数组的东西。非常值得。

感谢。