2010-03-31 16 views
6

La lingua è PHP. Ho uno foreach ($ a come $ b) e un altro foreach ($ c come $ d => $ e). Come faccio a combinarli per leggere come uno. Mi sono stancato foreach (($ a as $ b) & & ($ c come $ d => $ e)), ma questa è spazzatura.Come si combinano due cicli foreach in uno

risposta

0

Questo farà quello che vuoi, penso. Avanzerà entrambi gli array allo stesso tempo durante il ciclo. Si può sempre break manualmente se $c è una dimensione diversa rispetto $a ed è necessario logica di rottura in base alle dimensioni array:

foreach($a as $b) 
{ 
    list($d,$e) = each($c); 
    //continue on with $b, $d and $e all set 
} 

each() avanzerà il puntatore del $c ad ogni iterazione.

3

Non capisco cosa stai cercando di fare. Se si vuole raggiungere uno dopo l'altro basta usare due loop:

foreach ($a as $b) { ... } 
foreach ($c as $d => $e) { ... } 

Se si desidera che tutte le combinazioni da $a e $c:

foreach ($a as $b) { 
    foreach ($c as $d => $e) { 
    // do stuff 
    } 
} 

Credo che si potrebbe fare qualcosa di simile:

foreach (array_merge($a, $c) as $k => $v) { 
    ... 
} 

ma non lo consiglierei necessariamente.

22

Potreste essere interessati a SPL's MultipleIterator

esempio

// ArrayIterator is just an example, could be any Iterator. 
$a1 = new ArrayIterator(array(1, 2, 3, 4, 5, 6)); 
$a2 = new ArrayIterator(array(11, 12, 13, 14, 15, 16)); 

$it = new MultipleIterator; 
$it->attachIterator($a1); 
$it->attachIterator($a2); 

foreach($it as $e) { 
    echo $e[0], ' | ', $e[1], "\n"; 
} 

stampe

1 | 11 
2 | 12 
3 | 13 
4 | 14 
5 | 15 
6 | 16 
+0

Questo è il più interessante pace del codice che ho visto oggi. Più uno per quello. Gli array devono essere di uguale lunghezza, o si smette di iterare su uno solo di essi ad un certo punto? –

+3

Dipende dal fatto che si imposti il ​​flag MultipleIterator :: MIT_NEED_ANY o MultipleIterator :: MIT_NEED_ALL. Con MIT_NEED_ALL l'iteratore si arresta se uno qualsiasi degli iteratori interni non ha più elementi. Con MIT_NEED_ANY l'iteratore continua fintanto che almeno un iteratore interno ha un altro elemento, tutti gli altri elementi diventano NULL. MIT_NEED_ALL è il valore predefinito. – VolkerK

+1

Grazie per le informazioni, molto bello! –

7

1) primo metodo

<?php 
$FirstArray = array('a', 'b', 'c', 'd'); 
$SecondArray = array('1', '2', '3', '4'); 

foreach(array_combine($FirstArray, $SecondArray) as $f => $n) { 
    echo $f.$n; 
    echo "<br/>"; 
} 
?> 

o 2) secondo metodo

<?php 
$FirstArray = array('a', 'b', 'c', 'd'); 
$SecondArray = array('1', '2', '3', '4'); 

for ($index = 0 ; $index < count($FirstArray); $index ++) { 
    echo $FirstArray[$index] . $SecondArray[$index]; 
    echo "<br/>"; 
} 
?> 
Problemi correlati