我有一个嵌套的foreach循环遍历带有条件if - else
的2个数组。当if返回一个值时,else语句仍在运行,为什么会这样?
//$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个匹配值,我得到回声输出:“完全匹配”一次和“模糊匹配”x 10
答案 0 :(得分: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 :(得分: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
}