2011-12-10 69 views
-1

正如您在下面看到的,我正在瀏覽一個名爲$ subLinks的數組,將每個數據作爲$ subLink並將其添加到名爲$ linkArray的數組中,如果它尚未存在。Foreach循環不附加到數組

但是,在循環的每次迭代中,$ linkArray都被清除並從頭開始。因此,例如在每個循環結束時,$ linkArray回顯鏈接列表,並在第二個循環中清除鏈接列表,並用下一個$ subLink鏈接替換。

我的目標是用含有每$ SUBLINK一個大陣列落得 - 沒有重複,

$linkArray = array(); 
    foreach($subLinks as $subLink){ 

     # Validate and clean the links found 
     $subLink = cleanUrl($url,$subLink); 

     if(!in_array($subLink,$linkArray)){ 
     $linkArray[2] = $subLink; 
     } 

     echo($linkArray[2].'<br />'); 
     flushOutputBuffer(); 

    } 

什麼是呼應的一個例子是:

link1 
link2 
link3 

在下一個循環,這是呼應:

link1 
link2 
link3 

我想,如果它不是重複,要添加到數組,如此

link1 
link2 
link3 
link4 
link5 

任何幫助,在這裏真的很感激,

感謝

更新:數組似乎後110元復位,並覆蓋前一個條目

回答

2

你總是分配新的鏈接[2]並一遍又一遍覆蓋[2]的內容,請改爲:

//... 
if(!in_array($subLink, $linkArray)){ 
    $linkArray[] = $subLink; 
} 
//... 

這會將新鏈接追加到數組的末尾。

+0

這仍然不是爲我工作,當我在每個循環的最後做了print_r的,它只顯示了新鏈接 – Cristian

1

您沒有正確添加項目。爲了填充一個數組,你需要寫

$linkArray[] = $subLink; // do not specify an index 

當然,這一切都是沒有實際意義,因爲沒有達到相同的結果的好得多方式:

$linkArray = array_unique(array_map(
       function($item) use($url) { return cleanUrl($url, $item); }, $subLinks 
      )); 
+0

嗨再次喬恩!你給我的代碼給我的結果是這樣的:array_map()期望至少有2個參數,我敢肯定我做錯了什麼 – Cristian

+0

@ user964145:忘了添加第二個參數,對不起。再看一遍。 – Jon

+0

耶穌的速度差異是荒謬的,但它仍然沒有爲我工作,我編輯我的初始帖子來顯示我的代碼根據你的,讓我現在我做錯了什麼 – Cristian

1

嗯,因爲你'在每個循環中重寫它?你寫相同的指數一遍又一遍

如果要追加到索引中,像這樣做:

$ yourVar [2] [] = $ valueToAppend

+0

後我重置希望再次追加到同一個索引:) – Cristian

1

你要得到擺脫重複條目,首先將每個子鏈接添加到鏈接數組;那麼只需使用下面的函數來擺脫任何重複。這是一個單步過程,也是獲得數組中唯一數據的最快方法之一。

array_unique()函數刪除數組中的重複值。如果兩個或多個數組值相同,則第一個外觀將保留,另一個將被刪除。

語法

Array = array_unique(array) 

最後,你將有 '含每$ SUBLINK一個大陣列 - 沒有重複'。

那就是那個。希望這有助於,如果是的話,讓我知道。

PK