循环数组值,同时将它们连接到另一个数组值

时间:2011-10-27 15:51:01

标签: php arrays loops join foreach

我有两个数组

$a = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p');
$b = array('1','2','3','3','4','2','1','4','2','2');

数组$ a有时会有更多值。

我需要加入这两个数组但是为了得到结果我需要循环数组$ b的值,只要有数组$ a的值。

结果应该是这样的

a1
b2
c3
d3
e4
f2
g1
h4
i2
j2
k1 // array $b starts to loop here
l2
m3
n3
o4
p2

4 个答案:

答案 0 :(得分:3)

使用modulo (php: %)对于这类内容非常棒:

$i = 0;
$count = count($b);
foreach($a as $val1){
    echo $val1, $b[$i++ % $count];
    // if you don't want to echo, do something else :)
}

只要$i到达$count$i % $count就会再次从0开始。

答案 1 :(得分:1)

$i = 0;
$result = array();

foreach ($a as $val) {
  if (isset($b[$i])) {
    $result[] = $val.$b[$i++];
  } else {
    $result[] = $val.$b[0];
    $i = 1;
  }
}

print_r($result);

答案 2 :(得分:1)

无论两个数组的长度或索引是什么,这都是有效的版本:

function zip(array $a1, array $a2) {
    $a1 = array_values($a1); // to reindex
    $a2 = array_values($a2); // to reindex

    $count1 = count($a1);
    $count2 = count($a2);

    $results = array();
    for($i = 0; $i < max($count1, $count2); ++$i) {
        $results[] = $a1[$i % $count1].$a2[$i % $count2];
    }

    return $results;
}

<强> See it in action

答案 3 :(得分:0)

这会使$b“循环”,直到它与$a一样大。

<?php
    $a = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p');
    $b = array('1','2','3','3','4','2','1','4','2','2');
    while(count($b) < count($a))
        $b = array_merge($b, array_splice($b, 0, count($a) - count($b)));

    print_r($a);
    print_r($b);
?>