Кол-во просмотров с 08.06.24г. :: 138
Доброго времени суток, всем привет. Надеюсь, все хорошо провели выходные. Ну а мы продолжаем. Павел Вишу, здравствуйте. Добрый день. Леонид. Так. Значит, мы в прошлый раз застряли на том, что кровь из носу хотели я хотел получить, если мы заходим во вкладку, например, модель, то у нас здесь конструкция такая. Мы в глобальном расчете всех денежных потоков, мы вот в этих трех наших циклах, которые пробегают по переменным S, T и U, мы пытались выловить вот эти вот максимальное количество статей внутри каждого блока. Я как-то совсем это забыл, что ли, да, выпало из головы, что на самом деле вот этот вот цикл FOR, он не такой вот совсем банальный, да, как вот здесь, что мы начинаем, например, прокручивать этот цикл, прокручивать вот этот вот программный код внутри от t равного единицы, прибавляя по единичке, и вот вплоть до выполнения вот такого неравенства. Дело в том, что вот в этом месте, вот между вот этими двумя точками с запятой, первая точка с запятой и вторая точка с запятой, Вот между ними здесь внутри может быть на самом деле любое условие, которое останавливает этот цикл. Это очень важно. Давайте мы, как обычно, залезем в тот же самый Яндекс и наберем синтаксис цикла. цикла for php. смотрите ключевое слово for там для круглые скобки, содержащие внутри три выражения, разделенными точками с запятой. ну мы видим вот эти вот Три выражения. Первое выражение, потом точка с запятой, потом второе выражение, точка с запятой и третье выражение. Что дальше? Порядок выполнения цикла. В начале цикла выполняется инициирующее выражение. Далее следует условное выражение. Инициирующим выражением является вот это, с которого мы начинаем. t равняется 1. И оно выполняется вплоть до выполнения вот этого второго выражения. Перед началом каждой итерации вычисляется значение условного выражения, то есть условие выполнения. Если оно принимает значение true, то есть оно истинно, то тело цикла выполняется. Если оно принимает значение false, то выполнение цикла завершается. А у нас в каком случае должен завершаться цикл? То есть вот это ограничение, оно о чем говорит с точки зрения смысла? То, что у нас статей таких не существует. То есть если у нас параметр t принимает значение больше, чем количество статей внутри блока, то это значит, что Там дальше статей нет. То есть, если мы смотрим, например, на этот блок внутри, вот он перебирает 6 статей вот этих, 6 статей внутри вот этого третьего блока. И на седьмую итерацию мы не идем, просто потому что у нас нет седьмой статьи внутри. Или если у нас есть две статьи второго уровня, то на третью итерацию внутри он не идёт. И здесь тоже циферку 2, вот в этом вот месте, после выполнения, после закрытия вот этого блока, он на третью итерацию по второму уровню, на втором уровне, он не идёт. Потому что нет циферки 3. То есть 2, 3, 0, такого нет. Такой статьи нет. То есть, получается так, что суть вот этого неравенства состоит в том, что мы как бы делаем проверку, а есть ли такие статьи. Но у нас же есть и другой способ определения, есть такая статья или нет. У нас есть вот эта вот функция исцеп. то есть и мы причем ее проверяли вот эта функция и если отсутствует в структуре статей ддс статья второго уровня да то работаем на первом уровне то есть вот она она и да то есть если но ты да то мы там чего то есть Это получается, что мы и здесь можем использовать именно этот же подход. То есть нам не нужны количества, а мы можем написать, что если у нас там существует... То есть мы вот этот цикл ведем и его повторяем вплоть до того момента, пока у нас существуют соответствующие статьи, правильно? Поэтому давайте-ка мы именно так и поступим. То есть мы вообще избавимся вот от этих переменных Q, S, T, D, D, S. Количество статей D, D, S разных уровней. Мы вообще не будем применять эти переменные. То есть просто пойдем немножко другим путем. Ну и идем в старт. Значит, смотрим здесь, что у нас. Где у нас они вводятся? Значит, вот QSTDDS Level 2. И давайте посмотрим, вот у нас есть QSTDDS уровня 1. Количество статей уровня 1. Значит, давайте я их просто беру и удаляю, чтобы вообще даже не заморачиваться. То есть здесь они нам не нужны. то есть я их удаляю отсюда в принципе и у нас получается вот эти вот записи да вот эти вот условия условия эти ифы они как раз нам здесь главное удалять так чтобы не удалить чего-нибудь, что нам нужно. Значит, во-первых, мы... Вот они, они вот. Здесь будем хранить количество статей уровня 2, здесь будем хранить количество статей уровня 3. Давайте, мы вот это тоже удаляем. Дальше мы идем простой постатейный перебор сверху вниз. И здесь мы как раз таки формируем вот эти вот наши. Мы здесь формируем вот эти вот наши DDSST и метки. То есть создаем массив структуры статей и массив меток. массив структуры статей, массив меток, а также единственное, что нужно нам... нам вот эти вот U, S, вот это вот все нам здесь нужно или не нужно. А здесь они вот возникают, да? Вот у нас S равняется нулю. Мы заходим в текстовая строка статьи, набор отрезков кодовой строки соответствующих статьям DDS. И вот каждый блок мы потом его дальше тоже режем. Режем его по разделителям. У нас появляются разделы. И далее мы эти самые разделы, что мы тут с ними потом делаем, Я просто не помню. У меня такое ощущение, что вот это вот все нам не нужно. Но так ли это? Не, не так. Если S, что у нас такое? А, не равняется и мы режем. Раздел 1 и берем первую метку. Тогда мы вот этого находим. Здесь S равняется к слову. Значит, это у нас номера первого уровня. вот это вот нам точно здесь не нужно так вот убираем значит мы взяли а ну я так понимаю вот что нам нужно нужно просто вот это вот все удалить вот так вот и вытащить номера 1 2 3 уровня да и далее все значит мы заходим в блок, мы заходим в конкретный блок, разбиваем его на разделы, берем первый раздел, и внутри первого раздела мы просто создаем вот эти переменные st и u, три наших направления. Если не существует ddsst, если еще не создано вот такой массив, то мы создаем массив, если еще не создан такой массив меток, то мы создаем массив меток, инициализируем, объявляем. Если нет такого, то создаем... Так, все понятно. Это я просто вспоминаю то, что мы уже делали. И дальше мы создаем метки, создаем статьи. Все, в принципе, В принципе, вот и все. То есть у нас еще вот этот код еще меньше получился. Соответственно, вот у нас начало блока структуры статей DDS, и вот у нас завершение этого блока. Здесь вот мы фактически сформировали всю структуру. Ну а далее теперь. Нам нужно избавиться от этих самых количеств. Давайте я сохраню старт. Старт закидываем на сервер. И далее идем в модель. И везде, где мы встречаем вот эти вот, короче говоря, внутри циклов, вот эти условия нам нужно поменять. Значит, когда мы находимся на верхнем уровне, то как мы должны прописать? То есть у нас должно выполняться условие того, что статья, у которой «э» сравняется к какому-то очередному номеру, такая статья, но ноль-ноль, с ноликами, существует. То есть статья верхнего уровня с каким-то номером 1, 2, 3, 4 и так далее, 12, Существует, если существует статья, ну, например, вот статья с номером верхнего уровня, с номером 11. Существует, да, потому что есть 11.0.0. Такая статья есть. А 12.0.0. Такой нет. Правильно? Значит, нам нужно вот здесь вот написать, что у нас должна существовать, то есть пока у нас существует вот такая статья. Мы пишем is set. И в скобочках пишем DDSST 0 0. Мы берем новое S, то есть мы пробегаем этот цикл, у нас появляется новое значение S, переменный S, новый номер. И мы для этого номера смотрим, а существует ли вообще вот такая статья 11.0.0 или 9.0.0. А вот если станет 12, когда эта S будет 11, потом пробежит цикл и потом она станет 12, то 12.0.0 не существует.