使用数组 - 基于值的求助

时间:2013-10-23 09:41:39

标签: php arrays

我有一个数组:

$selected_emails = 
array(6) {
  [16781]=> "xxx@gmail.com",
  [16782]=> "yyy@gmail.com",
  [16785]=> "xxx@gmail.com,yyy@gmail.com",
  [16789]=> "yyy@gmail.com",
  [16751]=> "xxx@gmail.com,yyy@gmail.com,zzz@gmail.com",
  [16729]=> "zzz@gmail.com,bbb@gmail.com",
}

上述数组的keys是新闻ID,values是通过电子邮件获取该新闻(新闻ID)的电子邮件。

我想在上面的数组中发送电子邮件的电子邮件,所以我需要通过电子邮件地址(唯一)对上面的数组进行排序,并使用他们需要获取的新闻ID的值,所以上面的数组应该如:

$final_array = 
array(4) {
    [xxx@gmail.com] => "16781,16785,16751",
    [yyy@gmail.com] => "16782,16789,16751",
    [zzz@gmail.com] => "16751,16729,",
    [bbb@gmail.com] => "16729", 
}

因此,在新数组中,我知道每封电子邮件需要发送哪些新闻。

不幸的是我不知道我怎么能做到这一点,我已经做了很多foreach但没有一个工作正常。

如何实现这一目标?感谢

2 个答案:

答案 0 :(得分:3)

$final_array = array();

foreach ($selected_emails as $newsletter => $emails) {
    foreach (explode(',', $emails) as $email) {
        $final_array[$email][] = $newsletter;
    }
}

var_dump($final_array);

请注意,这会将简报ID存储为 数组而不是以逗号分隔的列表,这样更容易使用。

演示:http://3v4l.org/605SI

答案 1 :(得分:0)

看看php中的array_flip()函数,它将键与值交换: http://www.php.net/manual/en/function.array-flip.php

然后使用kso​​rt()按键对数组进行排序。

$selected_emails = array_flip($selected_emails);
ksort($selected_emails);
print_r($selected_emails);