2013-01-24 98 views
0

我试图从数组循环发送电子邮件给用户。每封电子邮件都可以出现在多个数组元素中,但除了电子邮件以外,其余元素是不同的。php基于值合并数组

我有下面的代码试图创建填充两个新的数组 - 一个只有电子邮件,而另一个与其他值,如'名称'等等。我最后需要的是一个数组,其中有像这样的:

$array_final(
      [0]email=>'[email protected]'=> (name1, name 2), 
      [1]email=>"[email protected]"=>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()等,但没有运气,顺便说一句。

有什么想法?谢谢。

+0

尝试用更好的方式解释你的'$ array_final',因为它不清楚你真的想要达到什么目的。 –

+0

$ array_final的电子邮件地址只能用数组元素表示一次,而相同的数组元素可以有多个“名称”。我的想法是,我可以遍历$ array_final并获取电子邮件,然后获取各种名称并通过电子邮件发送出去。 – IrfanClemson

+0

'$ array_final'和'$ array_emailedinfo'有什么区别?你能编辑你的问题并粘贴在那里吗? 'print_r($ array_final)'的输出结果? –

回答

1

让我们有两个数组:

$emails = array(array('email' => '[email protected]'), array('email' => '[email protected]'); 
$emails_info = array(array('email' => '[email protected]', 'name' => 'Alice'), array('email' => '[email protected]', '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['[email protected]'] = array(array('email' => '[email protected]', 'name' => 'Alice')); 

EDIT

该函数发现在阵列适当项目:

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... 
+0

好吧!尝试... thx – IrfanClemson

+0

不工作。使用你的代码(我甚至改变了数组到$ emails和$ emails_info),但print_r给了一堆数组(),然后实际数据与多个重复的电子邮件。我需要把你的代码放在一个函数中吗? – IrfanClemson

+0

对不起,我还没有测试过我的代码,我已经编辑了我的答案,请注意'返回$ item ['email'] == $ email ['email'];'在匿名函数中。 –

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数组的知识。很值得。

谢谢。