2011-05-08 104 views
2

我有一個嵌套的foreach循環通過2個數組與條件if - else。當if返回值時,else語句也仍在運行,爲什麼?嵌套的foreach如果不工作

//$global_plugins is an array 
//$xml_plugins is a string 

foreach($global_plugins as $key => $global_plugins){ 
    foreach ((array) $xml_plugins as $key2 => $xml_plugins){ 

    if (($global_plugins == $xml_plugins) && ($plugin_verso[$key] == $xml_plugin_version[$key2])){ 

     echo 'Exact match'; 

    }else{ 

     echo 'Fuzzy match'; 

    } 

    } 

} 

在這個例子中數組有10個值匹配,當if返回「精確匹配」,它不應該還回「模糊匹配」,然而,這是發生了什麼。

對於1個匹配值我得到的回聲輸出:「精確匹配」一週時間,「模糊匹配」×10

回答

2

你應該改掉使用break語句循環。

foreach($global_plugins as $key => $global_plugins){ 
    foreach ((array) $xml_plugins as $key2 => $xml_plugins){ 

    if (($global_plugins == $xml_plugins) && ($plugin_verso[$key] == $xml_plugin_version[$key2])){ 

     echo 'Exact match'; 
     break 2; 

    }else{ 

     echo 'Fuzzy match'; 
    } 

    } 

} 
1

foreach循環將遍歷所有元素,迴應'精確匹配'或'模糊匹配'。它不應該在一個循環內同時回聲,所以我能想到的是計數是關閉的(11個項目,或者只有9個回聲'模糊匹配')。

如果你想'精確匹配以輸出如有發現完全匹配一次,和「模糊匹配」輸出一個時間,如果沒有找到精確匹配,你需要調整你的循環,像這樣:

$found = 0; 
foreach($global_plugins as $key => $global_plugins) 
{ 
    foreach ((array) $xml_plugins as $key2 => $xml_plugins) 
    { 
    if (($global_plugins == $xml_plugins) && ($plugin_verso[$key] == $xml_plugin_version[$key2])) 
    {  
     echo 'Exact match'; 
     $found = 1; 
     break 2; // Once a match is found we exit both loops 
    } 
    }   
} 
if (! $found) 
{ 
    echo 'Fuzzy match'; // this will only be executed if no match is found 
}