2014-02-15 41 views
0

我在這裏看到了一些類似的問題,但無法得到我的問題的答案。Php array_diff()問題

我使用array_diff函數來取兩個數組的差異,但它不起作用。這是我的代碼。

$remainings = array_diff($quals,$assigned); 
for($i=0;$i<count($quals);$i++) 
    echo $quals[$i].'-'; 
echo count($quals); 
echo "<br>"; 
for($i=0;$i<count($assigned);$i++) 
    echo $assigned[$i].'-'; 
echo count($assigned); 
echo "<br>"; 
for($i=0;$i<count($remainings);$i++) 
    echo $remainings[$i].'-'; 
echo count($remainings); 

這是我得到的輸出:

TeamA-TeamB-TeamC-TeamD-TeamE-TeamF-TeamG-TeamH-TeamI-TeamJ-TeamK-TeamL-12

- -TeamE-TeamF --- TeamD-TeamH ---- TeamG-12

TeamA-TeamB-TeamC ----- 7

什麼我希望在最後一行是:

TeamA-TeamB-TeamC-TeamI-TeamJ-TeamK-TeamL-7

有什麼建議嗎?

+0

它在輸出中顯示。 Quals擁有從A到L的團隊。分配給團隊E,F,D,H,G – Baykal

+0

它是一個好主意,讓人們可以幫助你。他們應該能夠複製粘貼代碼並運行它。準備工作就是你的工作。 – goat

+0

我明白了。我在一個完全不同的地方填充這些數組。因此,複製粘貼代碼不會有多大意義。 – Baykal

回答

2

你所得到的,因爲和array_diff保留了第一陣列

所以你$remainings陣列看起來像這樣

Array ( 
    [0] => TeamA 
    [1] => TeamB 
    [2] => TeamC 
    [8] => TeamI 
    [9] => TeamJ 
    [10] => TeamK 
    [11] => TeamL 
) 

通知原鍵8,9,10,11指數最後半的團隊名稱

所以當你在做for循環時,你的索引從0到7,並且沒有3,4,5,6索引沒有打印出來(你會得到一個E_NOTICE未定義的索引錯誤,如果你有display_在錯誤)

所以不是做for循環的常規使用foreach循環

foreach($remainings as $team) 
    echo $team.'-'; 
echo count($remainings); 

將輸出: TeamA-TeamB-TeamC-TeamI-TeamJ-TeamK-TeamL-7

PHPFiddle Demo(點擊運行按鈕)

由於Niet的黑暗Absol提及您也可以使用array_values「重置」鍵 只需執行以下操作:

$remainings = array_values(array_diff($quals,$assigned)); 

http://php.net/array-values

array_values()從 返回所有值的陣列和索引數組數值。

+1

您也可以使用'array_values'來「重置」這些鍵。 –

+0

太好了。非常感謝! – Baykal