【问题标题】:PHP Create String Combinations for loopPHP为循环创建字符串组合
【发布时间】:2014-07-10 15:25:50
【问题描述】:

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

例如:字符串:“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

我没有得到“三星二重奏”

【问题讨论】:

    标签: php string


    【解决方案1】:

    试试这个

    $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

    【讨论】:

      【解决方案2】:

      输出:

      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);
      }
      

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2019-09-24
          • 1970-01-01
          • 2022-12-17
          • 1970-01-01
          • 2012-05-25
          • 2015-06-26
          • 1970-01-01
          • 1970-01-01
          • 2013-04-14
          相关资源
          最近更新 更多