Зацикливание значений массива при соединении их с другими значениями массива - PullRequest
0 голосов
/ 27 октября 2011

У меня есть два массива

$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 ]

3 голосов
/ 27 октября 2011

Использование по модулю (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 голос
/ 27 октября 2011

Вот версия, которая работает независимо от длины или индексов двух массивов:

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;
}

См. В действии .

1 голос
/ 27 октября 2011
$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);
0 голосов
/ 27 октября 2011

Это делает $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);
?>
...