Как размножить текст на PHP?

Имеется такой текст:

{Вкуси же, друг,|Съешь ещё этих {мягких|свежих}} {французских|испанских} {булок|пончиков}, да выпей {чаю|кофе}.
Нужно сгенерировать все возможные варианты этого текста, которые можно получить путем "раскрытия скобок". Скобки могут быть вложенные.

Для этой задачи в закромах имеется такое народное творчество:

function multiply_text($text) {
    $result = array($text);
    do {
        $found = array();
        $tmp = array();
        foreach ($result as $key=>$string) {
            if (preg_match('/\{([^\{\}]+)\}/Uis', $string, $matches)) {
                $found[] = $key;
                $substrings = explode('|', $matches[1]);
                foreach ($substrings as $s) {
                    $tmp[] = preg_replace('/\{'.preg_quote($matches[1]).'\}/Uis', $s, $string);
                }
            }
        }
        if (count($found) > 0) {
            foreach($found as $key){
                unset($result[$key]);
            }
            $result = array_unique(array_merge($result, $tmp));
        }
    } while (count($found) > 0);
    return $result;
}