该阵列应如何循环?

时间:2014-09-03 19:06:57

标签: php arrays

首先,让我们看一下数组 -

$array1 = array('user@email.com','user2@email.com','user3@email.com'); // Imagine this has over a million users

$array2 = array('domain1.com','domain2.com'); // This may have between 10-20 domains

我想要做的是循环用户并不断地将第二个数组中的域分配给第一个数组中的用户。完成后应该看起来像这样 -

$finished = array('user@email.com' => 'domain1.com', 'user2@email.com' => 'domain2.com', 'user3@email.com' => 'domain1.com');

如何循环浏览$array1并按顺序将$array2的域名分配给每个用户?

现在这令我难以置信。

来自"重复答案"的FYI array_combine()这个答案是不正确的。正确答案如下。如果$ array1中有5,000,000封电子邮件,而$ array2中有10个域,则完成的数组只会为数组中的前10个项目提供相应的域名。标记为重复的人没有阅读完整的描述,或者不理解PHP。

3 个答案:

答案 0 :(得分:4)

与Barmar相似,但使用密钥:

$count = count($array2);

foreach($array1 as $key => $value) {
    $finished[$value] = $array2[$key % $count];
}

这适用于你发布的数组,但是如果你让我们说$array1中的所有偶数或所有奇数键都会炸弹,也会使用关联数组。

答案 1 :(得分:3)

在指定值时,以$array2模式增加索引的大小。

$index = 0;
$finished = array();
foreach ($array1 as $email) {
    $finished[$email] = $array2[$index];
    $index = ($index + 1) % count($array2);
}

答案 2 :(得分:0)

在较大的集合上循环。保留一个二级索引变量,每次迭代,递增它,然后将其设置为以较小集合的大小为模的值。使用此辅助索引作为第二个集合的索引,以分配给第一个集合中的元素。