2010-05-01 8 views
0

Je souhaite ajouter chaque utilisateur dans un tableau et vérifier les doublons avant de le faire.Remplissage d'un tableau PHP dans une boucle foreach

$spotcount = 10;  


for ($topuser_count = 0; $topuser_count < $spotcount; $topuser_count++)  //total spots 
{ 

$spottop10 = $ids[$topuser_count]; 
$top_10 = $gowalla->getSpotInfo($spottop10); 
$usercount = 0; 
$c = 0; 
$array = array(); 

foreach($top_10['top_10'] as $top10)  //loop each spot 
{ 
    //$getuser = substr($top10['url'],7);  //strip the url 
    $getuser = ltrim($top10['url'], " users/"); 

    if ($usercount < 3)  //loop only certain number of top users 
    { 
     if (($getuser != $userurl) && (array_search($getuser, $array) !== true)) { 

      //echo " no duplicates! <br /><br />"; 
      echo ' <a href= "http://gowalla.com'.$top10['url'].'"><img width="90" height="90" src= " '.$top10['image_url'].' " title="'.$top10['first_name'].'" alt="Error" /></a>  ';        
      $array[$c++] = $getuser; 



     } 
     else { 

      //echo "duplicate <br /><br />"; 
     } 

    } 
    $usercount++; 
} 
print_r($array);  


} 

Les impressions de code précédent:

Array ([0] => 62151 [1] => 204501 [2] => 209368) Array ([0] => 62151 [1] => 33116 [2] => 122485) Array ([0] => 120728 [1] => 205247 [2] => 33116) Array ([0] => 150883 [1] => 248551 [2] => 248558) Array ([0] => 157580 [1] => 77490 [2] => 52046) 

Ce qui est faux. Il vérifie les doublons, mais seulement le contenu de chaque boucle foreach au lieu du tableau entier. Comment est-ce si je stocke tout dans $ array?

+1

Alerte de code spaghetti. –

Répondre

1

array_search() renvoie la clé pour tout ce que vous recherchez, s'il se trouve dans le tableau. Vous faites une comparaison d'inégalité stricte !== contre true, donc si array_search DOES trouve une entrée dans le tableau (disons, la clé est 7), alors 7 !== TRUE est vrai, et vous continuez à ajouter l'entrée à votre nouveau tableau.

Ce que vous voulez est array_search(...) !== FALSE, qui sera évalué à true uniquement si array_search échoue.

De plus, vous n'avez pas besoin d'utiliser votre compteur d'index de tableau $c++. Vous pouvez utiliser $array[] = $getuser qui va automatiquement coller $ getuser dans une nouvelle entrée à la fin du tableau.

0

utilisation ci-dessous fonction pour tableau multidimensionnel

function in_multiarray($elem, $array) 
    { 
     $top = sizeof($array) - 1; 
     $bottom = 0; 
     while($bottom <= $top) 
     { 
      if($array[$bottom] == $elem) 
       return true; 
      else 
       if(is_array($array[$bottom])) 
        if(in_multiarray($elem, ($array[$bottom]))) 
         return true; 

      $bottom++; 
     }  
     return false; 
    } 

pour plus d'informations voir le in_array()

0

plus rapide et plus propre tableau multidimensionnel récursive recherche, en utilisant la Standard PHP Library (SPL).

function in_array_recursive($needle, $haystack) { 
    $it = new RecursiveIteratorIterator(new RecursiveArrayIterator($haystack)); 

    foreach($it as $element) { 
     if($element == $needle) { 
      return true; 
     } 
    } 

    return false; 
} 
Questions connexes