goto вообще-то не плох, но как инструмент для разработки ПО он морально устарел. У нас уже давно есть исключения и управляющие конструкции типа break/continue, которым можно передавать пропускаемый уровнь вложености.
Если кто не понял что я имел ввижу когда писал про break и continue, вот пример
$rows = array();
foreach ($items as $item) {
foreach ($this->criteria as $attribute => $value) {
if (!isset($item[$attribute])) {
if (!empty($value)) {
continue 2;
}
continue;
}
if ($item[$attribute] != $value) {
continue 2;
}
}
$rows[] = $item;
}
return $rows;
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации