PHP为循环创建字符串组合

时间:2014-07-09 06:53:06

标签: php string

我正在从表单中用户给出的输入中创建字符串的可能组合。

例如:字符串:“samsung s duos”;

我必须创建一个组合,例如

samsung
s
duos

samsung s
samsung duos
s duos

组合的顺序应该只从左到右开始。

所以我做的是

$input = $_post['inputstring'];

$productNameSplit = explode(" ",$input);


$cntsplit = count($productNameSplit);

for($i=0; $i<$cntsplit; $i++)
{
   echo "<br>";                    
   echo "Part1 : ".$part1= $productNameSplit[$i];
   echo "<br><br>";
   echo "Part2 :".$part2 = $productNameSplit[$i]." ".$productNameSplit[$i+1]."<br>";
   echo "<br>";
   echo "Part3 :".$part3 = $productNameSplit[$i+1]." ".$productNameSplit[$i]."<br>";
}

print_r(productNameSplit);

输出

Array ( [0] => samsung [1] => s [2] => duos ) 


Part1 : samsung

Part2 :samsung s

Part3 :s samsung // i dont want this since s samsung = samsung s

Part1 : s

Part2 :s duos

Part3 :duos s // i dont want this since s duos = duos s

Part1 : duos

Notice: Undefined offset: 3 in Part2 :duos 

Notice: Undefined offset: 3 in Part3 : duos

我没有得到'samsung duos'

3 个答案:

答案 0 :(得分:0)

尝试这个

$input = "samsung s duos";

$arr_names = explode(" ",$input);
$cnt_names = count($arr_names);
for($i=0; $i<$cnt_names; $i++)
{
    echo $arr_names[$i]."<br/>";
    for($j=$i+1; $j<$cnt_names; $j++)
    {
        echo $arr_names[$i]." ".$arr_names[$j]."<br/>";
    }

}

输出:

samsung
samsung s
samsung duos
s
s duos
duos

<强> DEMO

答案 1 :(得分:0)

您正在寻找的是电源组,请查看以下帖子: Finding the subsets of an array in PHP

[编辑:] 请注意,此处的其他解决方案不适用于任意大小的组合(我不允许对其进行评论)。

答案 2 :(得分:0)

输出:

samsung s  
samsung duos  
s duos  

在这里演示:https://eval.in/170783

PHP:

function combinaison($array, $level = 0) {
    for ($i = $level+1; $i < count($array); $i++)
        echo "{$array[$level]} {$array[$i]}  \n";

    if (isset($array[$level+1]))
        combinaison($array, $level+1);
}

combinaison(explode(" ", "samsung s duos"));

优化:

function combinaison($array, $level = 0) {
    for ($i = $level+1; $i < count($array); $i++)
        echo "{$array[$level]} {$array[$i]}  \n";
    (isset($array[$level+1])) && combinaison($array, $level+1);
}