2010-10-03 24 views
1
$teams = array(1, 2, 3, 4, 5, 6, 7, 8); 
$game1 = array(2, 4, 6, 8); 
$game2 = array(); 

si teams[x] est pas game1 puis insérez dans game2Aide pour la boucle For. Les valeurs de répétition

for($i = 0; $i < count($teams); $i++){ 
    for($j = 0; $j < count($game1); $j++){ 
     if($teams[$i] == $game1[$j]){ 
      break; 
     } else { 
      array_push($game2, $teams[$i]); 
     } 
    } 
} 

for ($i = 0; $i < count($game2); $i++) { 
    echo $game2[$i]; 
    echo ", "; 
} 

Im attendant que le résultat soit:

1, 3, 5, 7, 

Cependant, im obtenir:

1, 1, 1, 1, 3, 3, 3, 3, 4, 5, 5, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 8, 

Comment puis-je améliorer cela? Merci

Répondre

5

D'autres ont déjà répondu sur la façon d'utiliser array_diff.

Raison pour laquelle votre boucle existante ne fonctionne pas:

if($teams[$i] == $game1[$j]){ 
     // this is correct, if item is found..you don't add. 
     break; 
    } else { 
     // this is incorrect!! we cannot say at this point that its not present. 
     // even if it's not present you need to add it just once. But now you are 
     // adding once for every test. 
     array_push($game2, $teams[$i]); 
    } 

Vous pouvez utiliser un drapeau pour corriger votre code existant:

for($i = 0; $i < count($teams); $i++){ 
    $found = false; // assume its not present. 
    for($j = 0; $j < count($game1); $j++){ 
     if($teams[$i] == $game1[$j]){ 
      $found = true; // if present, set the flag and break. 
      break; 
     } 
    } 
    if(!$found) { // if flag is not set...add. 
     array_push($game2, $teams[$i]); 
    } 
} 
+0

merci, im être toujours intéressé de savoir pourquoi ma boucle isnt travailler. Des idées? – Jonathan

5

Votre boucle ne fonctionne pas parce que chaque fois que l'élément de $teams n'est pas égal à l'élément de $game1, il ajoute l'élément $teams à $game2. Cela signifie que chaque élément est ajouté plusieurs fois à $game2.

Utilisation array_diff à la place:

// Find elements from 'teams' that are not present in 'game1' 
$game2 = array_diff($teams, $game1); 
1

Vous pouvez utiliser PHP de array_diff():


$teams = array(1, 2, 3, 4, 5, 6, 7, 8); 
$game1 = array(2, 4, 6, 8); 
$game2 = array_diff($teams,$game1); 

// $game2: 
Array 
(
    [0] => 1 
    [2] => 3 
    [4] => 5 
    [6] => 7 
)