Рассчитайте варианты продукта на основе вариантов групп и вариантов

Я пишу сайт электронной коммерции и нужен хороший способ расчета вариаций продукта. На сайте есть продукты, продукты могут иметь много вариантов групп, опционные группы могут иметь много вариантов.

Таким образом, товар футболки имеет 3 группы опций и варианты:

Размер : Маленький, Середина, Большой,

цвет : Красный, Синий, Желтый, Черный,

Материал : Хлопок, Нейлон,

, который создает: маленький красный хлопок, маленький красный нейлон, маленький синий хлопок, маленький синий нейлон, ... так далее и пр.

Я знаю, что скрипт ниже работает, но и что его можно оптимизировать Отказ Может ли кто-нибудь предоставить лучший рабочий пример этого? Должно быть возможно, используя рекурсию, а также я ударю психический блок.

    if(count($option_groups) > 1)
    {
        // start the variants up
        foreach($option_groups[0]->get_options() as $option)
        {
            $variants[] = array($option);
        }

        // go through every other option group to make combos
        for($x = 1; $x < count($option_groups); $x++)
        {
            $combos = array();

            foreach($variants as $variant)
            {
                $new = array();
                foreach($option_groups[$x]->get_options() as $option)
                {
                    $tmp        = $variant;
                    $tmp[]  = $option;
                    $new[]  = $tmp;
                }
                $combos[] = $new;
            }
            $variants = array();
            foreach($combos as $combo)
            {
                foreach($combo as $tmp)
                {
                    $variants[] = $tmp;
                }
            }
        }
    }

Это не Super Time Sencials, но я хотел бы иметь более удобный кусок кода, это довольно грубо.

Также эта проблема (я чувствую, что это не оригинальная проблема, многие тележки делают это) иметь имя? Я ничего не тянул на Google для этой проблемы.

Редактировать Это то, с чем я оказался, на основании решения ProfitPhp, но поддерживает мои объекты вместо того, чтобы дать мне опции на вариант, объединенные как строку. Все благодаря ProfitPhp!

private function _possible_combos($groups, $prefix = array())
{
    $result = array();
    $group  = array_shift($groups);
    foreach($group->get_options() as $selected)
    {
        if($groups)
        {
            $tmp            = $prefix;
            $tmp[]      = $selected;
          $result = array_merge($result, $this->_possible_combos($groups, $tmp));
        }
        else
        {
            $tmp            = $prefix;
            $tmp[]      = $selected;
          $result[] = $tmp; 
        }
    }

    return $result;
}
5
задан Francis Yaconiello 7 September 2011 в 00:22
поделиться