ФорумПрограммированиеPHP для идиотов → Слишком много итераций

Слишком много итераций

  • Kikky

    Сообщения: 201 Репутация: N Группа: Кто попало

    Spritz 27 января 2013 г. 12:09

    Во вьюхе админки вывожу данные следующим образом.. Выскакивает ошибка, о том что слишком много памяти скрипт хочет. Можно как-то избавится от первого цикла
    <?php for($i=1;$i<7;$i++) { ?> 
    , если мне 7 одинаковых селектов нужно.. В переменную наебашить а потом ее уже 7 раз вывести? Подскажите
    							<form method=&quot;POST&quot; action=&quot;<?php echo $this->baseUrl(&#39;admin/update-recomendation-block&#39;); ?>&quot;>
    <?php for($i=1;$i<7;$i++) { ?>
    <span class=&quot;margin-v&quot;><label for=&quot;block-<?php echo $i; ?>&quot;>Товар №<?php echo $i; ?>:</label></span>
    <select name=&quot;block-<?php echo $i; ?>&quot; style=&quot;width:350px;&quot; class=&quot;chzn-select&quot;>
    <option value=&quot;0&quot;></option>
    <?php foreach($this->aMainCategories as $aMainCategory) { ?>
    <?php foreach($this->aSubCategories as $aSubCategory) { ?>
    <?php if($aMainCategory[&#39;id&#39;] == $aSubCategory[&#39;category_id&#39;]) { ?>
    <optgroup label=&quot;<?php echo $aMainCategory[&#39;title&#39;].&#39; | &#39;.$aSubCategory[&#39;title&#39;]; ?>&quot;>
    <?php foreach($this->aAllProducts as $aProduct) {
    if($aProduct[&#39;category_id&#39;] == $aSubCategory[&#39;id&#39;]) { ?>
    <option value=&quot;<?php echo $aProduct[&#39;id&#39;]; ?>&quot; <?php if($aProduct[&#39;id&#39;] == $this->aRecomendations[$i-1][&#39;product_id&#39;]) { echo &#39;selected&#39;; } ?>><?php echo $aProduct[&#39;title&#39;]; ?></option>
    <?php } ?>
    <?php } ?>
    </optgroup>
    <?php } ?>
    <?php } ?>
    <?php } ?>
    </select>
    <?php } ?>
  • AlexanderC

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 27 января 2013 г. 15:48, спустя 3 часа 39 минут 1 секунду

    у меня предчуствие что дело в отсудствии lazy load…
  • Sinkler

    Сообщения: 9658 Репутация: N Группа: в ухо

    Spritz 28 января 2013 г. 2:47, спустя 10 часов 58 минут 29 секунд

    на js ебани копирование селекта, пусть браузер виснет
  • indeego

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 28 января 2013 г. 7:21, спустя 4 часа 34 минуты 16 секунд

    Теперь я понимаю почему похапе говно. В Питоне с итераторами хуй бы лишняя память скушалась. В похапе тоже не далеко до итераторов, но пока они только в 5.5
  • Flare

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 28 января 2013 г. 9:19, спустя 1 час 57 минут 43 секунды

    indeego как бы это ты написал на питоне с помощью итераторов, хочу сравнить
  • artoodetoo

    Сообщения: 5138 Репутация: N Группа: в ухо

    Spritz 28 января 2013 г. 9:45, спустя 25 минут 59 секунд

    Kikky, а память точно во вьюхе кончается? что-то здесь в самом выводе не видно затратных операций. сдается мне проблема где-то в другом месте, которое ты НЕ цитируешь {+++65+++} может ты какие-то кране прожорливые штуки используешь при добыче данных. например Yii ActiveRecord известен своей неоправданной жадностью.
    ιιlllιlllι унц-унц
  • indeego

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 28 января 2013 г. 11:10, спустя 1 час 25 минут 49 секунд

    Flare, я начинающий питонист, но уже нашел много плюсов. Самый простой пример:
    У тебя foreach перебирает
     $this->aMainCategories 


    На питоне это был бы метод, который возвращает не список весь сразу, а итерацию по запросу, код был бы по сути тот же, но отличалась функция, которая возвращает $this->aMainCategories:

    def getMainCategories():
    for i in categoriesContainer:
    yield i


    Это самый тупо пример. Тут я возвращаю например число, никто не мешает возвращать список или кортеж.
  • phpdude

    Сообщения: 26618 Репутация: N Группа: в ухо

    Spritz 28 января 2013 г. 12:05, спустя 54 минуты 22 секунды

    Сапожник без сапог
  • AlexanderC

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 28 января 2013 г. 15:45, спустя 3 часа 40 минут 8 секунд

    indeego, esti vsjo v php… toliko ne generatory! {+++14+++} a iteratory esti {+++34+++} tut skoree obiekty pamjati szhirajut…

    I da, chto slozhno profiling normalinyj provesti i posmotreti?
  • indeego

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 28 января 2013 г. 19:39, спустя 3 часа 54 минуты 5 секунд

    AlexanderC, а я и не отрицал что их нет, но появились они только в 5.5
  • AlexanderC

    Сообщения: ? Репутация: N Группа: Кто попало
  • Kikky

    Сообщения: 201 Репутация: N Группа: Кто попало

    Spritz 29 января 2013 г. 9:39, спустя 3 минуты 39 секунд

    Оптимизировал циклы, убрал лишние итерации, теперь нормально ебашит)

Пожалуйста, авторизуйтесь, чтобы написать комментарий!