2013-07-04 37 views
0
$condition1[0] = 2; 
$condition1[1] = 3; 
$condition2[0] = 3; 
$condition2[1] = 2; 
$condition2[2] = 1; 

for($i=0; $i<3; $i++){ 
    for($j=0; $j<2;$j++){ 
     if($condition1[$j] == $condition2[$i]){ 
      $permission = false; 
      continue; 
     } 
    } 
    if($permission){ 
     echo 'success'; 
    } 
} 

正如你所看到的,我想檢查兩個數組。 當在這種情況下$condition2 中有一個不同的值時,必須回顯「成功」,因爲只有一個區別是$condition2[2] = 1,所以「成功」必須只回響一次,但它會發生兩次!繼續使用條件在PHP

以及如果我使用continue;像上面的例子,它是否跳過整個內部for()

+0

也許'array_intersect'會更有用,而不是做多個循環?另外,通過將'if(){echo}'片段移動到腳本的底部,在for($ i ...)'循環的外部,你可以修復你的多輸出問題。 –

+3

你可能想要「休息」而不是「繼續」。 'continue'停止當前的迭代,'break'退出整個循環。 – Barmar

+0

我用'break',但'成功'的次數爲零 – RedHood148

回答

1

如果所有你關心的是找到一個差異下面的代碼應該做些什麼技巧:

$permission = false; 
for($i=0; $i<3; $i++){ 
    for($j=0; $j<2;$j++){ 
     if($condition1[$j] != $condition2[$i]){ 
      $permission = true; 
      break; 
     } 
    } 
} 

    if($permission){ 
     echo 'success'; 
    } 
+0

我試過這個,但它不起作用 – RedHood148

+0

向我解釋你想達到的目標。 –

+1

我改變了代碼的結構,它工作。我認爲我有一個合乎邏輯的問題,代碼沒有任何問題。無論如何感謝您的幫助;) – RedHood148

0

首先,Barmar指出,您可能想使用break而不是繼續。

其次,在您的代碼中,$ permission永遠不會設置爲true。所以,它不會迴應「成功」並不奇怪。

也許你想這是什麼(althgout我必須承認我不是一定要知道你想達到的目標):

$condition1[0] = 2; 
$condition1[1] = 3; 
$condition2[0] = 3; 
$condition2[1] = 2; 
$condition2[2] = 1; 

for($i=0; $i<3; $i++){ 
    $permission = true; 
    for($j=0; $j<2;$j++){ 
     if($condition1[$j] == $condition2[$i]){ 
      $permission = false; 
      break; 
     } 
    } 
    if($permission){ 
     echo 'success'; 
    } 
} 
+0

'$ permission'是一個全局變量,默認值爲'true' – RedHood148

+0

當然可以,但在外循環的第一次迭代中, $ permission被設置爲false,並且因爲它永遠不會被設置爲true,所以它不會迴應'success' –

+0

我添加了'else {$ permission = ture; }'如果後,那麼我有2'成功' – RedHood148