我有一个嵌套的foreach循环,通过2个带有条件if - else
的数组。当 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
您应该使用 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';
}
}
}
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
}