2011-10-27 56 views
0

我有兩個陣列環路的陣列值,同時,它們接合到另一個數組值

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

數組$一個有時具有多個值。

我需要加入這兩個數組,但對於結果我需要循環數組$ b的值,只要有數組$ a的值。

結果應該是這樣的

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

你應該看一看範圍()。 – str

回答

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重新開始。

+0

考慮接受的答案。我只需要等待幾分鐘:) – Goldie

+0

@Goldie酷,很高興我可以幫助:) – middus

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

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); 
?> 
+2

如果'$ a'有100個項目,'$ b'有10個(基本上,如果count($ a)/ count ($ b)> = 2')? – Jon

+0

只有'$ b'至少爲'$ a'大小的一半時纔有效:http://codepad.org/Oa3EdqVk – jprofitt

+0

@Jon yikes,好點。固定。 –

相關問題