2011-05-08 4 views
2

조건부 if - else 인 2 개의 배열을 통과하는 중첩 된 foreach 루프가 있습니다. 값을 반환하면 else 문도 여전히 실행되고 있는데, 그 이유는 무엇입니까? if는 "정확히 일치"를 반환 할 때 배열에 맞게 (10 개) 값이이 예를 들어 다른 경우 작동하지 않는 경우 중첩 된 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

답변

2

당신은 break 문을 사용하여 루프를 중단해야합니다

1 개 일치하는 값을 위해 나는 에코 출력을 얻을.

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 
} 
관련 문제