Задать вопрос

Ищу класс функцию для перебора всех возможных вариантов строки

Всем добрый день.

Ищу класс (функцию) на PHP для перебора всех возможных вариантов строки сформированной из таких конструкций {||}.

Совсем великолепно будет если перебор будет идти от самой уникальной строки к самой неуникальной.
  • Вопрос задан
  • 3070 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@torchello
Недавно на Хабре проскакивал топик. Ссылку не сохранил, только код:
<?

$str = "{Пожалуйста|Просто} сделайте так, чтобы это {удивительное|крутое|простое} тестовое предложение {изменялось {быстро|мгновенно} случайным образом|менялось каждый раз}";
$finishStrs = array();

getVariants($str);

function getVariants($str) {
    global $finishStrs;
    $strs = array();
    
    
    if(preg_match("~\{([^{}]+)\}~siU", $str, $m)) {
        
        $foundExpression = $m[1];
        
        $currentVariants = explode("|", $foundExpression);
        
        foreach($currentVariants as $var) {
            $strs[] = str_replace('{'.$foundExpression.'}', $var, $str);
        }
        
        foreach($strs as $currentStr) {
            if(preg_match("~\{([^{}]+)\}~siU", $currentStr, $m)) {
                getVariants($currentStr);
            } else {
                $finishStrs[] = $currentStr;
            }
        }
               
    } else {
        $finishStrs = $str;
    }     

    
}

print_r($finishStrs);
Ответ написан
Комментировать
Cord
@Cord
тем кто вдруг сюда зашел, погуглив мою задачу в вакансии — этот алгоритм не учитывает позиционность вхождения и не является верным в общем случае (а не для конкретно данной строки).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы