2015-05-11 46 views
0

我有一個值的數組,如果「if」爲真,我想將值插入另一個數組但是帶有if條件,我想跳過迭代。如何跳過在foreach foreach中的迭代

代碼:

$array=array(array(1=>11,2=>22,3=>23,4=>44,5=>55)); 
$insert=array(); 
foreach($array as $k1=>$v1) 
{ 
foreach($v1 as $k2=>$v2) 
{ 
    if($v2==23) 
    { 
     break; 
    } 
} 
    $insert[]=$v1; 
} 

最終的結果應該看起來像

Array 
(
[0] => Array 
    (
     [1] => 11 
     [2] => 22 
     [3] => 44 
     [4] => 55 
    ) 
) 

我嘗試使用:休息,返回,繼續......

感謝

+2

'continue'應該工作 –

+0

你沒有做任何事情在你的內循環,所以打破了它不會改變任何東西無論是。從它看起來,你根本不需要內部循環。 – jeroen

回答

2

有幾種方法可以做到這一點。您可以在外部陣列上循環並在內部陣列上使用array_filter以刪除值爲23(IMO首選;這也使用$dontWant數字的數組,因此以後更容易添加或更改數字):

<?php 
$array = array(array(1=>11,2=>22,3=>23,4=>44,5=>55)); 
$insert = array(); 

//array of numbers you don't want 
$dontWant = array(23); 

//loop over outer array  
foreach($array as $subArray){ 
    //add to $insert a filtered array 
    //subArray is filtered to remove where value is in $dontWant 
    $insert[] = array_filter($subArray, function($val) uses ($dontWant) { 
     //returns true if the value is not in the array of numbers we dont want 
     return !in_array($val, $dontWant); 
    }); 
} 
//display final array  
echo '<pre>'.print_r($insert,1).'</pre>'; 

或者,你可以參考第一鍵添加到子陣列中$insert喜歡(這更像是你的代碼試圖做的,表明你是不是太離譜了一點):

<?php 
$array = array(array(1=>11,2=>22,3=>23,4=>44,5=>55)); 
$insert = array(); 
//loop over outer array  
foreach($array as $k1=>$v1){ 
    //add an empty array to $insert 
    $insert[$k1] = array(); 

    //loop over inner array 
    foreach($v1 as $k2=>$v2){ 
     //if the inner array value is not 23 
     if($v2 != 23){ 
      //add to inner array in insert 
      $insert[$k1][] = $v2; 
     } 
    } 
} 
//display the result  
echo '<pre>'.print_r($insert,1).'</pre>'; 

這兩種方法都會產生相同的結果。使用array_filter的IMO是首選的方法,但對於新編程的人來說,第二種方法可能會更容易理解。

2

爲什麼不你只是嘗試這樣嗎?

foreach($v1 as $k2=>$v2) 
{ 
    if($v2!=23) 
    { 
     $insert[]=$v2; 
    } 
} 

編輯: 說明:您有檢查,如果($ V2 = 23!)如果變量$v2的價值不等於(也就是!=號)任意給定數量的不平等後代表運算符,如果是這樣,它會將該值插入到數組$insert

我希望現在很清楚。

對不起,我寫了$ v1而不是$ v2,代碼現在應該可以工作。

+3

「像這樣」引發了什麼?解釋讓答案更好 –

+1

我用一個簡短的解釋編輯了我的答案,很抱歉如果你沒有立刻理解它。 – brance

+0

'$ v1'是從外部循環設置的數組。您的代碼會將該數組添加到'$ insert'中,每個鍵的值都是'!= 23'。您只是將重複值添加到'$ insert'數組中,而不是從內部數組中刪除值爲23的值。 –

1

要添加變種:)

$array=array(array(1=>11,2=>22,3=>23,4=>44,5=>55)); 
$insert=array(); 

foreach($array as $a) 
{ 
    while (($i = array_search(23, $a)) !== false) 
     { unset($a[$i]); sort($a); } 
    $insert[] = $a; 
} 
print_r($a); 

結果:

Array ([0] => Array ([0] => 11 [1] => 22 [2] => 44 [3] => 55))