2011-07-07 8 views
1

我有一個問題。我認爲這應該很好地工作:FOR循環需要更多的重複,那麼它應該爲我需要的結果

for($i = 0; $i < count($tags); $i++){ 
     if(in_array($tags[$i], $str)){ 
      for($a = 0; $a < count($str); $a++){ 
       if($tags[$i] == $str[$a]){ 
        unset($str[$a]); 
       } 
      } 
     } 
    } 

str是由1,3,4,5,500的陣列,501

標籤是由4,5,500,501的陣列。

結果應該是1,3,結果爲1,3,500,501

實驗後,我發現此代碼的工作,但不穩定,在我看來:

for($i = 0; $i < count($str) + count($tags); $i++){ 
     for($a = 0; $a < count($tags); $a++){ 
      if ($tags[$a] == $str[$i]) { 
       unset($str[$i]); 
      } 
     } 
     $a = 0; 
    } 

我在做什麼錯?

回答

1

你沒有使用array_diff假設。

  1. 除非你有一個非常有說服力的理由,foreach只是更好。你不需要計數,你正在處理數組的實際鍵。
  2. 內置的數組函數是你的朋友。 array_search在迭代時比最優化的PHP代碼好得多。
  3. While循環可以讓你的生活更:-)

例子:

foreach($tags as $tag) 
{ 
    while(($key = array_search($tag, $str)) !== FALSE) 
    { 
     unset($str[ $key ]); 
    } 
} 
+0

這是更適合我,謝謝:) – Aistis

3

太多的代碼,當你可以簡單地做:

$difference = array_diff($tags, $str); 
+0

感謝標記B :) – Aistis