2016-06-20 7 views
0

私はユーザー入力(文字列)を取って、すべての可能な長さの単語の組み合わせ(配列)のリストに変換したいが、順番に並んでいる組み合わせだけを保持したい。PHP:文字列内の任意の長さのシーケンスをすべて見つけるにはどうすればよいですか?

ので、下記のPHPに記載された配列は、最終的に次のようになり、次のように

$newArray = ["this","string","will","be","chopped","up","this string","will be","be chopped","chopped up","this string will","string will be","be chopped up"];

私のコード(動作しない)は次のとおりです。

PHP

$str = "This string will be chopped up."; 
$str = strtolower($str); 
$strSafe = preg_replace("/[^0-9a-z\s-_]/i","",$str); 
$array = explode(" ", $strSafe); 
$newArray = []; 
$newArrayEntry = []; 

for($counter=0; $counter < COUNT($oneword); $counter++) { 

    // List single words - as in array $oneword. 
    echo "One word: "; 
    echo $oneword[$counter]; 
    echo "<br />"; 

    $counterTwo = $counter+1;  

    if($counterTwo <= COUNT($oneword)) { 
     $newArrayEntry[COUNT($newArrayEntry)] = $oneword[$counter]; 
     print "Adding counter One to newArray Entry: ".$oneword[$counter]."<br />"; 
     for($counterThree=($counter+1); $counterThree < $counterTwo; $counterThree++) { 
      $newArrayEntry[COUNT($newArrayEntry)] = $oneword[$counterThree]; 

      if($counterThree - $counterTwo == 1) { 
       $newArrayEntry[COUNT($newArrayEntry)] = $oneword[$counterTwo]; 
       print "Adding counter Two to newArrayEntry: ".$oneword[$counterTwo]."<br />"; 
      } 
     } 
     $newArrayString = join(' ', $newArrayEntry); 
     $newArray[COUNT($newArray)] = $newArrayString; 
    } 
} 
+1

「の文字列がします」がありません... – trincot

+1

限りあなたは...あなたの配列に値を追加するためにプッシュを使用することができますし、カウンターのループであなたにも別のカウンタを必要とします私はあなたの基本的な配列をさまざまなポイントと異なる長さからループすることがわかります。 – Medda86

+0

ありがとうございました! trincotとは何を意味するのかわかりません。 –

答えて

2

ますこのコードを使用できます:

$str = "This string will be chopped up."; 
$str = strtolower($str); 
$strSafe = preg_replace("/[^0-9a-z\s-_]/i","",$str); 
$array = explode(" ", $strSafe); 
$newArray = []; 

for ($len = 1; $len <= count($array); $len++) { 
    for($start = 0; $start+$len <= count($array); $start++) { 
     $newArray[] = implode(" ", array_slice($array, $start, $len)); 
    } 
} 


var_export($newArray); 

出力:

array (
    0 => 'this', 
    1 => 'string', 
    2 => 'will', 
    3 => 'be', 
    4 => 'chopped', 
    5 => 'up', 
    6 => 'this string', 
    7 => 'string will', 
    8 => 'will be', 
    9 => 'be chopped', 
    10 => 'chopped up', 
    11 => 'this string will', 
    12 => 'string will be', 
    13 => 'will be chopped', 
    14 => 'be chopped up', 
    15 => 'this string will be', 
    16 => 'string will be chopped', 
    17 => 'will be chopped up', 
    18 => 'this string will be chopped', 
    19 => 'string will be chopped up', 
    20 => 'this string will be chopped up', 
) 
+0

最適化していただきありがとうございますが、私も読む必要があります。 配列(...(続き) '文字列は'、 '文字列は'、[...]は '、'は切り刻まれる、切り刻まれる、切り刻まれる、切り刻まれる) 私はそれを解決したと思う。今晩はテストをするつもりですが、私は答えを含めるように質問を更新します。ありがとう! –

+1

あなたが言及した値はすべて出力にありますが、意味が分かりません。限り、私のコードで生成された出力があなたの質問に沿っている....また、質問に答えを入れないでください。代わりに答えを投稿してください...答えとして。 – trincot

+0

申し訳ありません...私はこれを完全に誤解しています。私はそれを別の質問と混ぜ合わせたと思う....ありがとう!!! :) (投稿する前にあなた自身の質問に答えるためのルールを読むつもりでした...ベストプラクティスにあまり精通していませんが、今は必要ありません) –

関連する問題