Вложенный foreach, если не работает - PullRequest
2 голосов
/ 09 мая 2011

У меня есть вложенный цикл 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 соответствующего значения я получаю вывод эхо: «Точное совпадение» один раз и «Нечеткое совпадение» х 10

Ответы [ 2 ]

2 голосов
/ 09 мая 2011

Вы должны разбивать циклы, используя оператор 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 голос
/ 09 мая 2011

Циклы foreach будут перебирать все элементы, повторяя либо «Точное совпадение», либо «Нечеткое совпадение».Он не должен отражать оба в одном цикле, так что я могу думать только о том, что счетчик выключен (либо 11 элементов, либо только 9 эхо «нечеткого совпадения»).

Если вы хотите, чтобы «точное совпадение» выводилось один раз, если найдено какое-либо точное совпадение, и «нечеткое совпадение» выводилось один раз, если не было найдено точное совпадение, вам нужно будет реструктурировать циклы следующим образом:1003 *

$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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...