2010-06-09 9 views
0

J'ai un tableau associatif comme suit:foreach boucles imbriquées pour les combinaisons de tableaux associatifs

$myarray = array('a'=>array(), 'b'=>array(), 'c'=>array(), 'd'=>array()); 

Je veux être en mesure d'obtenir toutes les paires d'éléments dans le tableau. Si ce n'était pas un tableau associatif, je l'utilise pour les boucles imbriquées, comme:

for($i=0; $i<count($myarray); $i++) { 
    for($j=$i+1; $j<count($myarray); $j++) { 
    do_something($myarray[$i], $myarray[$j]); 
    } 
} 

J'ai regardé en utilisant des boucles foreach, mais comme la boucle intérieure passe par tous les éléments, certaines paires sont répétées. Y a-t-il un moyen de faire cela?

Merci!

+0

sont les clés de votre tableau associatif ordonné de quelque façon? – SilentGhost

Répondre

0

La fonction array_values ​​() retourne un tableau indexé entier contenant toutes les valeurs, de sorte que vous pouvez l'utiliser pour obtenir une liste que vous pouvez parcourir avec un pour.

Sinon, vous pouvez « détruire » le tableau de cette façon:

while($k = array_pop($my_array)) { 
    foreach($my_array as $j){ 
    do_something($k, $j); 
    } 
} 
+0

Merci, je pense que cela m'a donné l'indice dont j'avais besoin. J'ai utilisé array_keys() plutôt que array_values ​​(), puis bouclé à travers les clés avec 2 boucles imbriquées. Succès! :) – JohnL

0

Essayez:

$keys = array_keys($myarray); 
$c = count($myarray); 
foreach ($keys as $k => $key1) { 
    for ($i = $k + 1; $i < $c; $i ++) { 
     dosomething($myarray[$key1], $myarray[$keys[$i]]); 
    } 
} 
Questions connexes