我想在php中构建一个包含单词的每个可能的大写排列的数组。所以它会是(伪代码)
function permutate($word){
for ($i=0; $i<count($word); $i++){
...confused here...
array_push($myArray, $newWord)
}
return $myArray;
}
所以说我放入“学校”我应该得到一个
的阵列{school,School,sChool,SCHool,schOOl,... SCHOOL}
我知道将字符串或第一个字符大写的函数,但我真的在努力解决这个问题。
答案 0 :(得分:9)
这应该适合你:
function permute($word){
if(!$word)
return array($word);
$permutations = array();
foreach(permute(substr($word, 1)) as $permutation){
$lower = strtolower($word[0]);
$permutations[] = $lower . $permutation;
$upper = strtoupper($word[0]);
if($upper !== $lower)
$permutations[] = $upper . $permutation;
}
return $permutations;
}
但是,对于您的特定用例,可能有更好的解决方案。由于长度为2^n
的字符串有n
个排列。在更长的字符串上运行它(甚至可以使用任何方法生成所有这些字符串)是不可行的。
实际上,如果你想要进行不区分大小写的匹配,你可能应该先将字符串转换为一个特定的情况,然后再将它们存储在数据库中,然后再将它们存储在数据库中。