2012-04-27 2 views
-2

Можно создать дубликат:
How to generate all permutations of a string in PHP?PHP доступные варианты

Я хочу сделать скрипт в PHP, который будет принимать этот вход:

12a 

и вывода результата, как так:

1, 2, a, 12, 1a, 21, 2a, a1, a2, 12a, 1a2, 21a, 2a1. 

Я провел некоторое исследование, но я не могу найти сценарий, который сделает это.

+0

И вопрос «где я могу найти такой сценарий»? В чем проблема, с которой вы столкнулись? – KingCrunch

+0

, что я не могу найти его и спросить помощь, разве это не нужно? [bad englisch: P] – lexvdpoel

+5

Результат, который вы даете, не следует никакому очевидному шаблону. Сначала кажется, что он дает все возможные подстроки переупорядочений входной строки, но отсутствует 'a12' и' a21'. – Hammerite

ответ

2

Вот модифицированная функция от this ответа

function permute($str,$i,$n) { 
    if ($i == $n) 
     print "$str\n"; 
    else { 
     for ($j = $i; $j < $n; $j++) { 
      swap($str,$i,$j); 
      permute($str, $i+1, $n); 
      swap($str,$i,$j); // backtrack. 
     } 
    } 
} 

// function to swap the char at pos $i and $j of $str. 
function swap(&$str,$i,$j) { 
    $temp = $str[$i]; 
    $str[$i] = $str[$j]; 
    $str[$j] = $temp; 
} 

$str = "12a"; 
$len = strlen($str); 
for($i =0; $i <= $len; $i++) { 
    permute($str,0,$i + 1); // call the function. 
} 
+0

Что такое '$ tstr'? –

+1

@Truth, ха-ха, я не знаю, но, конечно, не существует. – Starx

1

Это не идеально, потому что ваш выходной набор не определен. Сначала выясните, как должен выглядеть ваш выходной набор, а затем используйте ниже, чтобы начать.

<?php 

$input = "12a"; 
$input_array = str_split($input, 1);//get an array of each individual character 

$max_length = strlen($input); 
$length = 01; 
$result = array(); 

foreach($input_array as $character) { 
    $result[] = $character; 
} 

while ($length < $max_length){ 
    foreach($result as $substring) { 
    foreach($input_array as $character) { 
     $result[] = $substring.$character; 
    } 
    } 
    $length++; 
} 

foreach ($result as $result_string) { 
    echo $result_string.", "; 
} 

В целом, эти типы алгоритмов используют «динамическое программирование».

+0

это работает отлично! Большое вам спасибо, я просто задавался вопросом, как я могу получить результаты до 128 бит? – lexvdpoel

+0

нашел это thanx для скрипта – lexvdpoel

+1

Starx также имеет хорошие решения. Обязательно выберите принятый ответ и проголосуйте за ответы, которые были вам полезны. –

Смежные вопросы