循环这两个数组

时间:2014-04-02 19:15:00

标签: php arrays mapping

我有一个场景,我需要在两个数组之间循环,如下所示

 Array
    (
        [0] => 2
        [1] => 5
        [2] => 6
        [3] => 7
        [4] => 8
        [5] => 9
        [6] => 10
        [7] => 11
        [8] => 12
    )

    Array
    (
        [0] => 1234567890
        [1] => 2345678901
        [2] => 3456789012
        [3] => 4567890123
        [4] => 5678901234
        [5] => 6789012345
        [6] => 7890123456
        [7] => 8901234567
        [8] => 9012345678
        [9] => 9901234567
        [10] => 1234567890
        [11] => 2345678901
        [12] => 3456789012
    )

第一个数组是用户,另一个是User1应该映射到第一个移动号码的移动号码,User2应该映射到第二个移动号码并继续。

在这个示例中,我有8个用户,因此对于第8个用户,第8个移动号码将映射到第9个移动号码,它应映射到第一个用户(我的意思是循环,直到所有移动号码都分配给用户)。

2 个答案:

答案 0 :(得分:0)

试试这个:

<?php

$mapping = array();

while (!empty($phone)) {
    for ($i=0; $i < count($users); $i++) {
        empty($mapping[$users[$i]]) and $mapping[$users[$i]] = array();

        if (!empty($phone)) {
            $mapping[$users[$i]][] = array_shift($phone);
        }
    }
}

答案 1 :(得分:0)

如果要循环地为用户分配电话号码,只需遍历每个手机号码,获取其索引,通过查找大小的索引的剩余部分,在$users数组中找到等效索引$users数组。您可以使用模数(%)运算符找到余数。
试试这个 -

$users = Array(2,5,6,7,8,9,10,11,12);
$mob =  Array(1234567890,2345678901,3456789012,4567890123,5678901234,6789012345,7890123456,8901234567,9012345678,9901234567,1234567890,2345678901,3456789012);
$res = Array();
$user_size = count($users);

//The main logic.
foreach($mob as $k=>$v){
    $res[ $users[$k % $user_size] ][] = $v;
}
var_dump($res);

/** OUTPUT 
array
  2 => 
    array
      0 => int 1234567890
      1 => float 9901234567
  5 => 
    array
      0 => float 2345678901
      1 => int 1234567890
  6 => 
    array
      0 => float 3456789012
      1 => float 2345678901
  7 => 
    array
      0 => float 4567890123
      1 => float 3456789012
  8 => 
    array
      0 => float 5678901234
  9 => 
    array
      0 => float 6789012345
  10 => 
    array
      0 => float 7890123456
  11 => 
    array
      0 => float 8901234567
  12 => 
    array
      0 => float 9012345678