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

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

  • Kikky

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

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

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

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

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

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

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

    Spritz 28 января 2013 г. 7:21, спустя 15 часов 32 минуты 45 секунд

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

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

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

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

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

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

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

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

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

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


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

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


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

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

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

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

    Сообщения: 270 Репутация: 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

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

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

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

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

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

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

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

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