Заголовок темы выбрал чтобы людям легче было найти эту досадную ошибку. Ошибку помог найти мой более опытный в PHP коллега, сам бы искал дольше. В сценарии обработки xml-документов (на самом деле не принципиально где) используется такая (примерно) конструкция: Код (Text): if(in_array('error', $some_array)) { continue; } Дальше, как опытные пхпшеры, вероятно, уже догадались, сценарий всё время переходил к следующей итерации цикла. Класс отвечающий за логирование работы сценария отдавал в логе примерно следующее: "В документе 2000 элементов". Далее, где обычно идёт лог обнаруженных ошибок, сразу вышли записи лога: "Ошибок 0 Сохранено элементов 0". Никаких ошибок памяти или иных fatal-ероров или варнингов. Сценарий отработал правильно. Уже проанализировав сценарий и найдя источник проблемы (он в коде выше), вопрос к обучающимся читателям форума: Почему цикл переходит к следующей итерации если в массиве $some_array нет ключа или значения содержащего 'error' ? Уточню: задача не в том, чтобы указать что нужно исправить чтобы перехода к следующей итерации не возникало, а именно объяснить почему он произошёл. Как и всегда в программировании на любом языке, ошибка и решение элементарные, но дабы ей "отомстить" за потраченное время, решил лишний раз запостить и напомнить коллегам.
Код (Text): for ($i = 0; $i<9000; $i++){ if(in_array('error', $some_array)) { continue; } } Действительно, ПОЧЕМУ произошел переход к следующей итерации? Код (Text): for ($i = 0; $i<9000; $i++){ echo 'УХАХА'; } Чертов цикл! Оно опять это делает! Оно опять выполняет итерацию за итерацией! Покажи фрагмент кода нормально. А то получается "доктор, у меня что-то болело, объясните, почему?" З.Ы. Только не говори что мой сарказм был в тему и я угадал.
Неужто из-за непроставленного стрикта оно срабатывало на всем подряд? Это правда подло и как-то глупо, не?
И так понятно что дело в третьем параметре. А цикл показывать нет смысла, потому что срабатывание условия перехода к следующей итерации при описанных мной условиях могло быть только в одном случае (ибо указал, что ни ключи ни значения массива не содержат 'error'). Цикл заносит на каждой итерации разные элементы в массив. После показа возможного содержимого массива, причина ошибки уже очевидна: Код (Text): $some_array = array(0=>'value1','title'=>'value2','desc'=>0); Ирония это конечно хорошо. Ошибка противная тем не менее и выявляется анализом кода разумеется более сложного чем упрощённый пример. Поэтому не нужно забывать про представления типов данных в PHP и сравнение значений разных типов: