Вам необходимо произвести все перестановки строки, либо перебирая возможности, либо используя рекурсивный метод, подобный приведенному ниже. Обратите внимание, что для массива среднего размера это очень быстро вырастет. Для слова с уникальными символами количество возможных перестановок равно n! где n длина. Для шестибуквенного слова в массиве будет 720 записей! Этот метод не самый эффективный, но в зависимости от того, что вы пытаетесь сделать, он должен работать нормально.
(Источник: http://cogo.wordpress.com/2008/01/08/string-permutation-in-php/)
function permute($str) {
/* If we only have a single character, return it */
if (strlen($str) < 2) {
return array($str);
}
/* Initialize the return value */
$permutations = array();
/* Copy the string except for the first character */
$tail = substr($str, 1);
/* Loop through the permutations of the substring created above */
foreach (permute($tail) as $permutation) {
/* Get the length of the current permutation */
$length = strlen($permutation);
/* Loop through the permutation and insert the first character of the original
string between the two parts and store it in the result array */
for ($i = 0; $i <= $length; $i++) {
$permutations[] = substr($permutation, 0, $i) . $str[0] . substr($permutation, $i);
}
}
/* Return the result */
return $permutations;
}
Обратите внимание, что эта несколько наивная реализация не будет правильно обрабатывать дублирующиеся буквы (например, «семя», имеющее две буквы «е»). Как указано в приведенном выше источнике, вы можете использовать следующий код для устранения дубликатов, если слово содержит несколько одинаковых букв:
$permutations = array_unique(permute($str));