Цикл разрывается после определенного количества итераций

У меня есть работа по миграции на сайты wordpress, хотя я не думаю, что wordpress имеет какое-либо отношение к моей проблеме. Итак, я получаю набор данных из таблицы (идентификатор, значение), которая сериализуется.

Я хочу поместить сериализованные данные в массивы в соответствии с функцией. Алгоритм все делает нормально для первых 86 записей.

Если я запускаю алгоритм всего на 86 записях, я мгновенно получаю все нужные данные. Но когда я запускаю его 87 или более раз, он просто загружается. Неважно, сколько времени будет длиться максимальное время выполнения, по-видимому, оно все равно достигнет его.

Я проверил 87-ю запись, есть ли с ней что-то странное, но ничего не вижу. Есть идеи, что могло вызвать это?

Вот код:

global $wpdb;

    $houses_built_years = $wpdb->get_results('SELECT post_id, meta_value FROM bp100_postmeta WHERE meta_key = "epites_eve"');

    foreach ($houses_built_years as $house_built_years) {
        if ($house_built_years->meta_value) {
            $years = unserialize($house_built_years->meta_value);
        } else {
            continue;
        }

        $build = array(array());
        $series = 0; $year = 0;

        while (count($years)) {
            if ($build[$series][$year] && (min($years) - $build[$series][$year] == 1)) {
                $year++;
                $build[$series][$year] = min($years);
                unset($years[array_search(min($years), $years)]);
            } else if ($build[$series][$year]) {
                $year = 0;
                $series++;
                $build[$series][$year] = min($years);
                unset($years[array_search(min($years), $years)]);
            } else {
                $build[$series][$year] = min($years);
                unset($years[array_search(min($years), $years)]);
            }
        }

        $repeater = array();
        foreach ($build as $series) {
            if (count($series) > 1) {
                $repeater[] = $series[0] . ' - ' . $series[count($series) - 1];
            } else {
                $repeater[] = $series[0];
            }
        }
    }

Вот пример записи (нарушение алгоритма при id = 30517):

30279 1201 epites_eve a:1:{i:0;s:4:"1898";}

30338 1202 epites_eve a:1:{i:0;s:4:"1891";}

30397 1203 epites_eve a:1:{i:0;s:4:"1894";}

30517 1205 epites_eve a:1:{i:0;s:4:"1897";}

30577 1206 epites_eve a:1:{i:0;s:4:"1891";}

Не могли бы вы попробовать запустить свой сценарий на итерации 86? Чтобы узнать, связана ли проблема со строкой или с количеством обработанных строк? Кроме того, не могли бы вы проверить память сервера во время запуска?

Mtxz 26.09.2018 13:41

Да, я пробовал. Это не относится к строке, а скорее к количеству строк.

András Tóth 26.09.2018 14:12

Это тяжело? вы пробовали увеличивать свой memory_limit?

Stender 26.09.2018 14:43

Проверьте свои журналы ошибок

johnnyd23 26.09.2018 14:45

В журналах ошибок я вижу только ошибки max_execution_time. memory_limit = 1000M установлен на атм, так что это не должно быть проблемой. Также максимальное время выполнения не должно возрасти, потому что с 86 записями это мгновенно, а с 87 оно достигает предела, даже если оно похоже на 50000 секунд.

András Tóth 26.09.2018 14:51

Вы проверяли статистику памяти во время бега? Если ваш объект действительно большой, он может заполнить память и заставить систему использовать подкачку (запись на диск) и все замедлить

Mtxz 26.09.2018 16:01

Его память / время после каждой итерации [память] => 0,459228515625 [секунды] => 0,0035550594329834

András Tóth 26.09.2018 16:10

Сделайте этот тест: установите htop, чтобы проверить статистику памяти в реальном времени. Затем запустите свой скрипт и проверьте значения htop с итераций от 0 до 87, чтобы увидеть, есть ли пик.

Mtxz 26.09.2018 16:48
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
8
44
0

Другие вопросы по теме