如果其他不起作用,则嵌套


Nested foreach if else not working

我有一个嵌套的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
}