-1

我有一个数组:

$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,但没有一个工作正常。

这怎么可能实现?谢谢

4

2 回答 2

3
$final_array = array();

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

var_dump($final_array);

请注意,这会将时事通讯 id 存储为 id数组而不是逗号分隔的列表,这样更容易使用。

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

于 2013-10-23T09:46:40.407 回答
0

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

然后使用 ksort() 按它的键对数组进行排序。

$selected_emails = array_flip($selected_emails);
ksort($selected_emails);
print_r($selected_emails);
于 2013-10-23T09:43:53.330 回答