2010-05-01 116 views
0

我希望將每個用戶添加到數組中,並在執行操作之前檢查重複項。在foreach循環中填充一個PHP數組

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


} 

上面的代碼打印:

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) 

哪項是錯誤的。它確實檢查重複項,但只檢查每個foreach循環的內容而不是整個數組。如果我將所有內容都存儲到$ array中,這是怎麼回事?

+1

意大利麪條代碼警報。 – 2010-05-01 04:16:21

回答

1

array_search()爲你搜索的任何東西返回鍵值,如果它在數組中。你做得對true嚴格的不平等比較!==,所以如果array_search確實發現數組(比方說,關鍵是7)的條目,那麼7 !== TRUE是真實的,你繼續將該條目添加到您的新陣列。

你想要的是array_search(...) !== FALSE,這將評估爲true只有array_search失敗。

此外,沒有必要使用$c++數組索引計數器。您可以使用$array[] = $getuser,它會自動將$ getuser粘貼到數組末尾的新條目中。

0

使用以下功能,用於多維數組

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

對於更多信息,參見in_array()

0

更快和更清潔的遞歸多維數組搜索,使用標準PHP庫(SPL)。

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

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

    return false; 
}