我有这样的字符串:hello world new foo
。
我需要这样的数组:
[
`helloworld new foo`,
`hello worldnew foo`,
`hello world newfoo`,
`helloworldnew foo`,
`hello worldnewfoo`,
]
顺序并不重要,但我需要在当前字符串中删除所有空格。
答案 0 :(得分:1)
您可以使用递归来枚举所有可能性:
<?php
function combine($words, $acc=array(), $res=array()){
if(count($words)===0){
$res[] = join("", $acc);
return $res;
}
if(count($words)===1){
$res[] = join("", $acc).$words[0];
return $res;
}
$w1 = array_shift($words);
$res = combine($words, array_merge($acc, array("$w1")), $res);
$res = combine($words, array_merge($acc, array("$w1 ")), $res);
return $res;
}
var_dump( combine( explode(' ', 'hello world new foo') ) );
另一个可能的解决方案是在你的单词之间表示N个空格,作为可以打开或关闭的二进制数中的位,然后从0到2 ^ N-1计数,但我认为在PHP中将是更复杂。
注意:上面的递归解决方案,返回所有可能的组合...所以如果你有一个包含4个单词的输入数组,其中一个结果将所有4个单词加入
答案 1 :(得分:1)
从我的理解,你需要所有可能的组合与给定的单词。所以:
for(i=0;i<=(words*spaces);i++)
String
中找到数组和空格中的单词,因此$WordArray = $string.split(" ")
和$spaces = substr_count(" ")
for(j=0;j<=words;j++)
for(k=0;k<=spaces;++)
但请记住,PERMUTATIONS and COMBINATIONS for computer science
是您首先需要学习的内容,因此上面的答案有很多意义。
这是一个帮助您入门的链接。 http://cpsc.ualr.edu/srini/DM/chapters/review3.4.html