PHP foreach останавливается после первой итерации без видимой причины

#php #debugging #exception #exception-handling #foreach

#php #отладка #исключение #обработка исключений #foreach

Вопрос:

У меня много проблем с циклом foreach в PHP.

Это не обычная проблема «break exit return whatever;», и я объясню вам причину:

 class Example {
     private function generic(/* args */) {
          global $db;
          $result = false;
          /* a series of if and functions, mysql transactions and 
             "throw new Exception" on rollback */
         $notif = new Notification();
         $notif->send(/* params */);
         /* if commit succeded > $result = true; */
         return $result;
    }

    public function start() {
         $list = array("abc" => array("foo" => "bar", "foo2" => "bar"), "def" => array("foo" => "bar", "foo2" => "bar"));
         foreach($list as $x => $y) {
             $this->generic($x, $y, ....);
         }
    }
}
  

Похоже, проблема связана с $notif объявлением и или $notif->send() функцией.

Я попытался попробовать поймать всю generic() функцию, а также send() функцию, но исключение не выдается.

send() Функция представляет собой не что иное, как серию запросов, и в конечном итоге (по запросу пользователя) отправляет уведомление по электронной почте через swiftmailer.

Еще одна деталь, которую я могу вам сообщить, заключается в том, что уведомление успешно отправляется, и, похоже, на первой итерации все работает нормально, но затем foreach останавливается.

Как я упоминал ранее: нет «exit ();» или «break;» или «return $ x;» в какой-то странной точке функции и так далее…

Есть ли у вас какие-либо идеи о том, в чем может быть проблема, или как я могу найти проблему?

Комментарии:

1. В foreach($list as $x => $y) вашей переменной $y есть an array , это желаемый результат? Есть ли у вас сообщения об ошибках?

2. Ну, может быть, foreach не останавливается, а просто не проходит через все значения. Как указал Бретт, вам понадобится другой foreach для итерации $y

3. @BrettSantore да, это массив и… это ожидаемое значение

4. @1nflktd нет, я тестировал это echo $x.print_r($y, true); внутри foreach, и если я прокомментирую часть $notif, она просто просматривает все значения, в противном случае она не выполняется после вызова send()

5. В каких параметрах $notif->send(/* params */); , похоже, вы отредактировали здесь слишком много.