Пятля значэння Масіў, далучаючыся іх да іншых значэнняў масіва

У мяне ёсць два масіва

$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');

Масіў $ а часам мае некалькі значэнняў.

Мне трэба, каб далучыцца да гэтых два масіву, але вынік мне трэба значэнняў цыклу масіў $ Ь, калі ёсць значэння масіва $ а.

Вынік павінен быць, як гэта

a1
b2
c3
d3
e4
f2
g1
h4
i2
j2
k1//array $b starts to loop here
l2
m3
n3
o4
p2
0
Вы павінны зірнуць на дыяпазон ().
дададзена аўтар str, крыніца

4 адказы

Выкарыстанне па модулю (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 :)
}

Як толькі $ я дасягае $ Count , $% $ я Колькасць будзе пачынацца 0 зноў.

3
дададзена
Разгледзім адказ прыняты. Мне проста трэба пачакаць некалькі хвілін :)
дададзена аўтар Goldie, крыніца
@Goldie Круто, рады, што змог дапамагчы :)
дададзена аўтар middus, крыніца
$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);
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.

1
дададзена

Гэта робіць $ B «пятля-над», пакуль гэта не такі вялікі, як $ а .

<?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);
?>
0
дададзена
@ Джон Плясь, добры момант. Выпраўлена.
дададзена аўтар Alex Turpin, крыніца
@ Джон сапраўды, рашэнне Голд з'яўляецца лепшым.
дададзена аўтар Alex Turpin, крыніца
Што рабіць, калі $ а мае 100 пунктаў і $ B мае 10 (у асноўным тое, што калі лічыльнік ($ а)/COUNT ($ б)> = 2 )?
дададзена аўтар Jon, крыніца
@ Xeon06: так гэта ўсё яшчэ не дастаткова добра ІМХО: а) не працуе правільна, калі масівы ня колькасна індэксавацца, б) будзе даволі моташна, каб прымусіць яго працаваць правільна, калі вы хочаце, каб таксама «пашырыць» $ а , калі ён карацей (<�я> тут Вам не патрэбен, але асіметрычнае паводзіны, як, што ў функцыі генератар памылкі), і в) няма сапраўды нічога атрымала, дадаўшы ўсе гэтыя дубляваць элементы: вы ўсё яшчэ можаце напісаць цела петлевой адзін радок без гэтага. Проста ежу для разважанняў - гэта падыход, які я думаў пра тое, як добра :)
дададзена аўтар Jon, крыніца
Працуе толькі калі $ Ь </​​код>, па меншай меры ў два разы менш $ а : codepad.org/Oa3EdqVk
дададзена аўтар jprofitt, крыніца